将 ndb 查询与实体一起写入 return 实体键
writing ndb query to return the entity key along with the entity
我有一个 ndb 用户模型:
class User(ndb.Model):
active = ndb.BooleanProperty(default=True,required=True)
email= ndb.StringProperty(required=True)
我调用它是为了检索包含我所有用户的 JSON 文件
@app.route('/get_users')
@login_required
def get_user_data():
users = json.dumps([u.to_dict() for u in User.query().fetch()])
return users
输出 return 如下所示:
[{"email": "user@email.com"},{"email": "user2@email.com"}....]
我想将每个用户的 ID 传递到对象中,以便稍后可以使用它来查询单个用户。理想情况下,我希望输出如下所示:
[{"email": "user@email.com", "id": xxxxxx},{"email": "user2@email.com", "id": xxxxxx}....]
我尝试将以下声明添加到我的模型中 class:
id = ndb.KeyProperty()
但我得到的是空值,而不是从数据存储实体中检索实际 ID 值。
如何提取所有用户的密钥并将它们添加到 returned 对象中?
您可以扩展 User.to_dict
以选择性地包含密钥:
def to_dict(self, include=None, exclude=None, include_key=False):
d = super().to_dict(include=include, exclude=exclude)
if include_key:
d['key'] = self.key.urlsafe().decode() # or some other JSON-friendly version of the key
return d
然后更改您的代码,如下所示:
users = json.dumps([u.to_dict(include_key=True) for u in User.query().fetch()])
密钥可以从其 urlsafe 密钥表示中重构,如下所示 (docs):
>>> ndb.Key(urlsafe=b"agdleGFtcGxlcgsLEgRLaW5kGLkKDA")
Key('Kind', 1337, project='example')
我有一个 ndb 用户模型:
class User(ndb.Model):
active = ndb.BooleanProperty(default=True,required=True)
email= ndb.StringProperty(required=True)
我调用它是为了检索包含我所有用户的 JSON 文件
@app.route('/get_users')
@login_required
def get_user_data():
users = json.dumps([u.to_dict() for u in User.query().fetch()])
return users
输出 return 如下所示:
[{"email": "user@email.com"},{"email": "user2@email.com"}....]
我想将每个用户的 ID 传递到对象中,以便稍后可以使用它来查询单个用户。理想情况下,我希望输出如下所示:
[{"email": "user@email.com", "id": xxxxxx},{"email": "user2@email.com", "id": xxxxxx}....]
我尝试将以下声明添加到我的模型中 class: id = ndb.KeyProperty()
但我得到的是空值,而不是从数据存储实体中检索实际 ID 值。
如何提取所有用户的密钥并将它们添加到 returned 对象中?
您可以扩展 User.to_dict
以选择性地包含密钥:
def to_dict(self, include=None, exclude=None, include_key=False):
d = super().to_dict(include=include, exclude=exclude)
if include_key:
d['key'] = self.key.urlsafe().decode() # or some other JSON-friendly version of the key
return d
然后更改您的代码,如下所示:
users = json.dumps([u.to_dict(include_key=True) for u in User.query().fetch()])
密钥可以从其 urlsafe 密钥表示中重构,如下所示 (docs):
>>> ndb.Key(urlsafe=b"agdleGFtcGxlcgsLEgRLaW5kGLkKDA")
Key('Kind', 1337, project='example')