2011-05-27 59 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