如何设置ndb的keyProperty



我在理解实体和键如何在Google App Engine NDB中工作时遇到了一些麻烦。

有一个post实体和一个user实体。如何设置post上的user_keyuser ?

在交互式控制台中,到目前为止我有这个:

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()

我只是想为发展建立一些种子数据。我知道这可能不是理想的设置方式,但我的第一个问题是:

  1. 如何从实体获得密钥(反向在文档中描述)
  2. 如何在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()
  1. 验证shuffle在这种情况下是否有效,因为User.query()返回一个iter,而不是一个列表。(您可以使用shuffle([x for x in users])将其转换为列表)。注意,这个列表可能很长。
  2. NDB有时会有一些非常有线的行为,所以我建议你不要存储NDB- key,而是存储它的序列化字符串,这也与ext.db: post兼容。user_key = shuffle([x for x in users]).key.urlsafe()
  3. 您可以使用KeyProperty进行关联。如果需要对关系进行更精细的控制,则必须自己实现它们。看到https://developers.google.com/appengine/docs/python/ndb/properties结构化

最新更新