简而言之:如何配置bulkloader将数据插入到2个带有引用的模型中?
我有一个person和水果类,其中的person链接到了水果:
class Fruit(db.Model):
name = db.StringProperty()
class Person(db.Model):
name = db.StringProperty()
customer = db.ReferenceProperty(Fruit)我想上传这个CSV数据:
Name,Fruit
Bob,Banana
Joe,Apple
Tim,Banana我尝试像在docs中一样使用create_foreign_key
transformers:
- kind: fruit
connector: csv
property_map:
- property: fruit
external_name: Fruit
- kind: person
connector: csv
connector_options:
encoding: utf-8
columns: from_header
property_map:
- property: title
external_name: Name
- property: fruit
external_name: Fruit
import_transform: transform.create_foreign_key('fruit')当我运行该命令时:
appcfg.py upload_data --config_file=bulkloader.yaml --filename=food.csv --kind=person .用户已上载,并且他们有水果的外键,但他们所指向的水果实体不存在。
当我尝试--kind=fruit的时候,水果被上传了,但是有很多重复的东西。
我试图将人链接到水果,没有重复的水果-这可以通过bulkloader实现吗?
发布于 2011-05-16 22:47:10
我不知道如何干净利落地做到这一点,所以最终只是将我的数据分割成多个文件,并预先生成ID。
发布于 2011-05-09 21:03:22
好的。
基本的问题是缺少一个步骤。您有一个水果名称,您想要存储的引用是一个水果关键字。您可以通过以下几种方式来完成此任务。
如果Banana或Apple是水果的永久唯一标识符,则可以使用transform.create_foreign_key('Fruit')。这将为您提供一个水果键,其中水果名称是键名称。人们将被上传指向不存在的水果实体,这是很好的。只需在__key__属性上使用相同的导入转换来上传水果,即可创建相应的实体。
如果您不想使用水果名称作为水果键名,则需要进行一些更复杂的导入后处理。您可以编写一个按名称查询水果的post_import_function,以查看匹配的实体是否已经存在,如果不存在,则创建一个实体,然后在新创建的person实体上设置对它的引用。
https://stackoverflow.com/questions/5937011
复制相似问题