我在理解实体和键如何在Google App Engine NDB中工作时遇到了一些麻烦。
有一个post
实体和一个user
实体。如何设置post
上的user_key
为user
?
在交互式控制台中,到目前为止我有这个:
from google.appengine.ext import ndb
from app.lib.posts import Post
from app.lib.users import User
from random import shuffle
users = User.query()
posts = Post.query().fetch()
for post in posts:
post.user_key = shuffle(users)[0]
post.put()
我只是想为发展建立一些种子数据。我知道这可能不是理想的设置方式,但我的第一个问题是:
- 如何从实体获得密钥(反向在文档中描述)
- 如何在ndb中设置关联?
try:
post.user_key = shuffle(users)[0].key
也许这有助于理解新开发银行。我也有同样的问题。
class Person(ndb.Expando):
pass
class Favourite(ndb.Expando):
pass
class Picture(ndb.Expando):
pass
person = Person()
person.put()
picture = Picture()
picture.put()
fav = Favourite(parent=person.key,
person=person.key,
picture=picture.key
)
fav.put()
- 验证shuffle在这种情况下是否有效,因为User.query()返回一个iter,而不是一个列表。(您可以使用shuffle([x for x in users])将其转换为列表)。注意,这个列表可能很长。
- NDB有时会有一些非常有线的行为,所以我建议你不要存储NDB- key,而是存储它的序列化字符串,这也与ext.db: post兼容。user_key = shuffle([x for x in users]).key.urlsafe()
- 您可以使用KeyProperty进行关联。如果需要对关系进行更精细的控制,则必须自己实现它们。看到https://developers.google.com/appengine/docs/python/ndb/properties结构化