http://thomas.broxrost.com/category/google-app-engine/およびhttp://blog.suinova.com/2009/03/tutorialで提案されているように、django-nonrel プロジェクトで appengine バルクローダーを使用したい-on-bulkloading-data-onto-app.html . しかし、エラーが発生しました:google.appengine.ext.webappという名前のモジュールはありません。これは Django-nonrel が原因だと思います。Google Web アプリケーションにアクセスできません。間違っていたら訂正してください。また、Google バルクローダーでサポートされているように、モデル フィールドも異なるようです。他の代替案を知っている人がいたら教えてください。オンライン ドキュメントやポインタは大歓迎です :-)
1 に答える
あなたの投稿を見たところです。django-nonrel プロジェクトで appengine バルクローダーを問題なく使用できます。
注意すべき点がいくつかあります。
バルクロードが必要なモデルでは、主キーとして使用するフィールドに「primary_key=True」を配置して、主キーを手動で設定しています。これにより、Django は主キー フィールドの key_name を使用してモデルを作成し、作成するモデルには既知の主キーがあることを確認できます。(auto 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」宣言で参照したフィールド ヘッダーと、バルクロードする対応するデータが必要です。
ローカルの実行サーバーの実行中に次のようなものを実行することで、ローカル環境で動作することを確認できます。
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