0

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 バルクローダーでサポートされているように、モデル フィールドも異なるようです。他の代替案を知っている人がいたら教えてください。オンライン ドキュメントやポインタは大歓迎です :-)

4

1 に答える 1

2

あなたの投稿を見たところです。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
于 2011-07-17T12:52:02.763 に答える