首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用bulkloader上传数据

使用bulkloader上传数据
EN

Stack Overflow用户
提问于 2011-05-09 20:41:17
回答 2查看 589关注 0票数 3

简而言之:如何配置bulkloader将数据插入到2个带有引用的模型中?

我有一个person和水果类,其中的person链接到了水果:

代码语言:javascript
复制
class Fruit(db.Model): 
    name = db.StringProperty()
class Person(db.Model): 
    name = db.StringProperty() 
    customer = db.ReferenceProperty(Fruit)

我想上传这个CSV数据:

代码语言:javascript
复制
Name,Fruit
Bob,Banana
Joe,Apple
Tim,Banana

我尝试像在docs中一样使用create_foreign_key

代码语言:javascript
复制
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')

当我运行该命令时:

代码语言:javascript
复制
appcfg.py upload_data --config_file=bulkloader.yaml --filename=food.csv --kind=person .

用户已上载,并且他们有水果的外键,但他们所指向的水果实体不存在。

当我尝试--kind=fruit的时候,水果被上传了,但是有很多重复的东西。

我试图将人链接到水果,没有重复的水果-这可以通过bulkloader实现吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-16 22:47:10

我不知道如何干净利落地做到这一点,所以最终只是将我的数据分割成多个文件,并预先生成ID。

票数 0
EN

Stack Overflow用户

发布于 2011-05-09 21:03:22

好的。

基本的问题是缺少一个步骤。您有一个水果名称,您想要存储的引用是一个水果关键字。您可以通过以下几种方式来完成此任务。

如果BananaApple是水果的永久唯一标识符,则可以使用transform.create_foreign_key('Fruit')。这将为您提供一个水果键,其中水果名称是键名称。人们将被上传指向不存在的水果实体,这是很好的。只需在__key__属性上使用相同的导入转换来上传水果,即可创建相应的实体。

如果您不想使用水果名称作为水果键名,则需要进行一些更复杂的导入后处理。您可以编写一个按名称查询水果的post_import_function,以查看匹配的实体是否已经存在,如果不存在,则创建一个实体,然后在新创建的person实体上设置对它的引用。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5937011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档