2011-05-27 24 views
0

我想在我的django-nonrel项目中使用appengine bulkloader,如http://thomas.broxrost.com/category/google-app-engine/http://blog.suinova.com/2009/03/tutorial-on-bulkloading-data-onto-app.html中建议的那样。 但它给错误:没有名为google.appengine.ext.webapp的模块。我认为这是因为Django-nonrel,我无法访问谷歌webapp.Correct我,如果我错了。此外,似乎我的模型字段也与google bulkloader支持的不同。 让我知道是否有人知道任何其他的选择。任何在线文件或指针都欢迎:-)带django-nonrel的Appengine Bulkloader

回答

2

刚刚看到您的文章。我可以在我的django-nonrel项目中使用appengine bulkloader。

有几件事情需要注意:

  • 在我需要bulkloaded的车型,我有手动设置主键放置“primary_key =真”在场上我想作为一个主要的使用键。这使得Django使用主键字段的key_name创建模型,并且可以确保您创建的模型具有已知的主键。 (而不是让自动pk字段控制,然后pk是appengine的随机ID字段)

  • 在您的bulkloader.yaml文件中,使用'field_id'引用您的外键属性字段。 django构造db模式的方式是外键字段实际上与'_id'相关联存储。不要尝试使用import_transform和export_transform把你的领域到AppEngine上的“钥匙”场......

这里是我有什么,目前工作的例子。

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 
+0

好Aaron..Thanks您answer..its有一段日子,我等待这个:-)将尝试它并尽快更新。 – SRC 2011-07-19 12:44:54