我刚刚开始将web2py与Google AppEngine一起用于我的应用程序。出于某种原因,我无法使用DAL保存/检索数据。这是我正在使用的代码:
在db.py:
的末尾from aeoid import middleware
from aeoid import users
import json
db.define_table('files',
db.Field('name', 'text'),
db.Field('path', 'text'),
db.Field('version', 'text', default="live"),
db.Field('hash', 'text'),
db.Field('data', 'text'),
db.Field('meta', 'text', default=json.dumps({'date':str(request.now)})),
db.Field('contributors', 'text', default=json.dumps([users.get_current_user()])),
db.Field('lasttime', 'datetime', default=request.now)
)
在我的控制器中:
name = "TEST"
db.files[0] = dict(hash=name, name=name, path=name)
textobj = db.files[1]
if textobj is None:
print "Fail: 500 Internal Server Error"
在这里,textobj由于某种原因总是无。
我做错了什么?
编辑:我在Windows上使用AppEngine SDK for Python。
答案 0 :(得分:1)
使用shortcut syntax db.table[id]
时,id
表示记录ID。 db.table[0]
实际上并不引用现有记录 - 它只是用于插入新记录。
此外,在GAE上,记录ID不会从1开始并增加1,因此您的第一个插入记录将不具有ID = 1。你可以这样做:
textobj = db(db.files).select().first()
或
textobj_id = db.files.insert(hash=name, name=name, path=name)
textobj = db.files[textobj_id]
最后,在部署到GAE之前,请确保您已使用GAE SDK应用服务器在本地运行应用,以便正确生成index.yaml文件,如here所述。