要运行我的应用,我需要一些静态实体,
所以我决定通过Remote API从CSV文件上传w / bulkloader。
但我有一些实体之间有关系。 像:
- kind: Category
properties:
- name: name
- kind: SubCategory
ancestor: yes
properties:
- name: parent_id
- name: name
我应该如何创建csv数据呢? 是否还有其他方法可以用来初始化我的应用数据存储区?
答案 0 :(得分:1)
如果您定义键值(作为字符串),则可以使用这些值创建csv文件。一个文件将包含类别值category_key,name
。另一个文件将包含SubCategory值subcategory_key,category_key,name
。例如,
cat1,Category 1
cat2,Category 2
subcat1,cat1,SubCategory 1
subcat2,cat1,SubCategory 2
subcat3,cat2,SubCategory 3
您可以逐行读取文件,并从数据中创建静态实体(在Python中):
import csv
with open('categories.csv') as csvfile:
categories = csv.reader(csvfile)
for row in categories:
Category.get_or_insert(row[0], name=row[1])
with open('subcategories.csv') as csvfile:
subcategories = csv.reader(csvfile)
for row in subcategories:
SubCategory.get_or_insert(row[0], parent_id=ndb.Key(Category, row[1]), name=row[2])
parent_id
值构造为键。两个循环都使用get_or_insert()函数来防止重复值,因此您可以多次运行它。
我看到SubCategory有一个祖先,所以你可以用这个替换最后一个调用(并删除parent_id
属性):
SubCategory.get_or_insert(row[0], parent=ndb.Key(Category, row[1]), name=row[2])