appcfg.py upload_data 实体种类问题

发布于 2024-08-28 11:35:17 字数 1305 浏览 6 评论 0原文

我正在应用程序引擎路径上开发应用程序,我想将一些数据上传到数据存储区。 例如,我有一个模型

models/places.py:

class Place(db.Model):
    name = db.StringProperty()
    longitude = db.FloatProperty()
    latitude = db.FloatProperty()

如果我将其保存在视图中,则该实体的 kind() 是“models_place”。 一切正常,视图中的 Place.all() 工作正常。

但是:

如果我使用 appcfg.py upload_data 上传下一行,则该实体的 kind() 是 Place。

loader.py 看起来像这样:

import datetime, os, sys
from google.appengine.ext import db
from google.appengine.tools import bulkloader

libs_path = os.path.join("/home/martin/myproject/src/")
if libs_path not in sys.path:
    sys.path.insert(0, libs_path)
from models import places

class AlbumLoader(bulkloader.Loader):
    def __init__(self):
      bulkloader.Loader.__init__(self, 'Place',
                                 [('name', lambda x: x.decode('utf-8')),
                                  ('longitude', float),
                                  ('latitude', float),
                                 ])
loaders = [AlbumLoader]

和上传命令:

python /usr/local/google_appengine/appcfg.py upload_data --config_file=places_loader.py --kind=models_place --filename=data/places.csv --url=http://localhost:8000/remote_api /home/martin/myproject/src/

I am developing application on app-engine-path and I would like to upload some data to datastore.
For example I have a model

models/places.py:

class Place(db.Model):
    name = db.StringProperty()
    longitude = db.FloatProperty()
    latitude = db.FloatProperty()

If I save this in view, kind() of this entity is "models_place".
All is ok, Place.all() in view work fine.

But:

If I upload some next row using appcfg.py upload_data, the kind() of this entities is Place.

loader.py look like this:

import datetime, os, sys
from google.appengine.ext import db
from google.appengine.tools import bulkloader

libs_path = os.path.join("/home/martin/myproject/src/")
if libs_path not in sys.path:
    sys.path.insert(0, libs_path)
from models import places

class AlbumLoader(bulkloader.Loader):
    def __init__(self):
      bulkloader.Loader.__init__(self, 'Place',
                                 [('name', lambda x: x.decode('utf-8')),
                                  ('longitude', float),
                                  ('latitude', float),
                                 ])
loaders = [AlbumLoader]

and command for uploading:

python /usr/local/google_appengine/appcfg.py upload_data --config_file=places_loader.py --kind=models_place --filename=data/places.csv --url=http://localhost:8000/remote_api /home/martin/myproject/src/

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

枕头说它不想醒 2024-09-04 11:35:17

我找到了分辨率:

places_loader.py:

from google.appengine.ext import bulkload

class PlaceLoader(bulkload.Loader):
    def __init__(self):
        bulkload.Loader.__init__(self, 'models_place',
                               [('name', lambda x: x.decode('utf-8')),
                                ('longitude', float),
                                ('latitude', float),
                               ])
if __name__ == '__main__':
    bulkload.main(PlaceLoader())

app.yaml:

- url: /load
  script: places_loader.py  

和命令:

python /usr/local/google_appengine/bulkload_client.py --filename data/places.csv --kind   models_place --url http://localhost:8000/load

I found resolution:

places_loader.py:

from google.appengine.ext import bulkload

class PlaceLoader(bulkload.Loader):
    def __init__(self):
        bulkload.Loader.__init__(self, 'models_place',
                               [('name', lambda x: x.decode('utf-8')),
                                ('longitude', float),
                                ('latitude', float),
                               ])
if __name__ == '__main__':
    bulkload.main(PlaceLoader())

app.yaml:

- url: /load
  script: places_loader.py  

and command:

python /usr/local/google_appengine/bulkload_client.py --filename data/places.csv --kind   models_place --url http://localhost:8000/load
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文