对于旧数据存储,我使用了密钥。现在我必须使用 ids(取自NDB Cheat Sheet doc):
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
但看起来这段代码不起作用 - 记录被添加了几次。
(在我的情况下,user_id 是字符串)
对于旧数据存储,我使用了密钥。现在我必须使用 ids(取自NDB Cheat Sheet doc):
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
但看起来这段代码不起作用 - 记录被添加了几次。
(在我的情况下,user_id 是字符串)
我找到了原因,我上面的代码是正确的,但是我的类包含 id 属性:
class User(ndb.Model):
id = ndb.StringProperty()
这就是问题所在。
请参阅 NDB 备忘单的“构建密钥”部分。
user = ndb.Key('User', user_id).get()
if user is None:
user = User(id=user_id)
或试试这个,让我知道它是否有效:
user = User.get_by_id(user_id)
if user is None:
user = User(id=user_id)
顺便说一句,即使 user_id 是您应该使用的字符串'%s' % user_id
听起来你想要一个事务操作:
user = User.get_or_insert(user_id)