无法使用 web2py 的 DAL 写入 AppEngine DataStore
我刚刚开始将 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 始终为 None 。
我做错了什么?
编辑:我在 Windows 上使用 AppEngine SDK for Python。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
使用 快捷语法
db.table[id]
,id
指的是记录ID。db.table[0]
实际上并不引用现有记录——它只是用于插入新记录。另外,在 GAE 上,记录 ID 不会从 1 开始并以 1 递增,因此您的第一个插入记录不会具有 ID=1。您可以执行以下操作:
或
最后,在部署到 GAE 之前,请确保您已使用 GAE SDK 应用程序服务器在本地运行应用程序,以便正确生成 index.yaml 文件,如所讨论的 此处。
When using the shortcut syntax
db.table[id]
,id
refers to the record ID.db.table[0]
doesn't actually refer to an existing record -- it is just used to insert a new record.Also, on GAE, the record IDs do not start at 1 and get incremented by 1, so your first inserted record will not have ID=1. You can either do:
or
Finally, before deploying to GAE, make sure you have run the app locally using the GAE SDK appserver in order to properly generate the index.yaml file, as discussed here.