gpt4 book ai didi

python - 使用 bulkloader 上传数据

转载 作者:太空宇宙 更新时间:2023-11-03 14:33:45 24 4
gpt4 key购买 nike

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

我有一个 person 和 fruit 类,person 链接到 fruit:

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 实现吗?

最佳答案

当然可以。

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

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

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

关于python - 使用 bulkloader 上传数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937011/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com