Невозможно записать данные в AppEngine DataStore, используя DAL web2py - PullRequest
1 голос
/ 14 октября 2011

Я только начал использовать 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по какой-то причине.

Что я делаю не так?

РЕДАКТИРОВАТЬ: я использую AppEngine SDK для Python в Windows.

1 Ответ

1 голос
/ 14 октября 2011

При использовании сочетания клавиш db.table[id], id относится к идентификатору записи. db.table[0] на самом деле не ссылается на существующую запись - она ​​просто используется для вставки новой записи. Кроме того, в GAE идентификаторы записей не начинаются с 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, как обсуждено здесь .

...