无法使用web2py的DAL写入AppEngine DataStore

时间:2011-10-14 12:47:23

标签: python database google-app-engine web2py

我刚刚开始将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。

1 个答案:

答案 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所述。