Python appcfg.py上载\u数据实体类型问题
我正在应用程序引擎路径上开发应用程序,我想上传一些数据到数据存储。 例如,我有一个模型 models/places.py:Python appcfg.py上载\u数据实体类型问题,python,django,google-app-engine,google-cloud-datastore,app-engine-patch,Python,Django,Google App Engine,Google Cloud Datastore,App Engine Patch,我正在应用程序引擎路径上开发应用程序,我想上传一些数据到数据存储。 例如,我有一个模型 models/places.py: class Place(db.Model): name = db.StringProperty() longitude = db.FloatProperty() latitude = db.FloatProperty() 如果我将其保存在视图中,则该实体的种类()为“models\u place”。 一切正常,在视图中放置.All()可以正常工作
class Place(db.Model):
name = db.StringProperty()
longitude = db.FloatProperty()
latitude = db.FloatProperty()
如果我将其保存在视图中,则该实体的种类()为“models\u place”。
一切正常,在视图中放置.All()可以正常工作
但是:
如果我使用appcfg.py upload_data上传下一行,则该实体的种类()为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/
我找到了解决方案:
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
之所以会发生这种情况,是因为您使用的是App Engine修补程序,它会修改模型类以将名称空间包含在种类名称中,但前提是已导入名称空间。