我想按照http://thomas.broxrost.com/category/google-app-engine/和http://blog.suinova.com/2009/03/tutorial-on-bulkloading-data-onto-app.html中的建议,在我的django-nonrel项目中使用appengine bulkloader。 但它给出错误:没有名为google.appengine.ext.webapp的模块。我认为这是因为Django-nonrel,我无法访问谷歌webapp。如果我错了,请更正我。此外,似乎我的模型字段也是不同的谷歌bulkloader支持。 如果有人知道任何其他选择,请告诉我。欢迎任何在线文件或指示: - )
答案 0 :(得分:2)
刚看到你的帖子。我可以在我的django-nonrel项目中使用appengine bulkloader。
有几点需要注意:
在我需要批量加载的模型上,我通过在我想用作主键的字段中放置'primary_key = True'来手动设置主键。这使得Django使用主键字段的key_name创建模型,并且您可以确定您创建的模型将具有已知的主键。 (而不是让自动pk字段控制,然后pk是appengine的随机id字段)
,使用'field_id'引用您的外键属性字段。 django构造数据库模式的方式是外键字段实际存储时加上'_id'。不要尝试使用import_transform和export_transform将您的字段转换为appengine“key”字段...
这是我目前工作的一个例子。
class Team(models.Model):
appengine_key = models.CharField(max_length=100, primary_key=True)
abbr = models.CharField(max_length=3)
name = models.CharField(max_length=10)
division = models.ForeignKey(Division, related_name="teams")
is_active = models.BooleanField(default=True)
created_time = models.DateTimeField(auto_now_add=True)
updated_time = models.DateTimeField(auto_now=True)
我对此字段的bulkloader.yaml声明如下所示:
python_preamble:
- import: google.appengine.ext.bulkload.transform
- import: google.appengine.ext.db
- import: re
- import: base64
- import: datetime
transformers:
- kind: app_team
connector: csv
connector_options:
encoding: utf-8
columns: from_header
property_map:
- property: __key__
external_name: appengine_key
export_transform: transform.key_id_or_name_as_string
- property: abbr
external_name: abbr
- property: name
external_name: name
- property: division_id
external_name: division
- property: is_active
external_name: is_active
import_transform: transform.none_if_empty(bool)
- property: created_time
external_name: created_time
import_transform: transform.import_date_time('%m/%d/%Y %H:%M:%S')
export_transform: transform.export_date_time('%m/%d/%Y %H:%M:%S')
- property: updated_time
external_name: updated_time
import_transform: transform.import_date_time('%m/%d/%Y %H:%M:%S')
export_transform: transform.export_date_time('%m/%d/%Y %H:%M:%S')
然后,你的csv文件只需要在'external_name'声明中引用它们的字段标题,以及要批量加载的相应数据!
您可以通过在本地runserver运行时运行类似以下的内容来确保它适用于您的本地环境:
python2.5 /usr/local/bin/appcfg upload_data --config_file=app/bulkloader.yaml --filename=app/fixtures/teams.csv --kind=app_team --url=http://localhost:8080/_ah/remote_api app