无法从数据存储 GAE 中检索数据

Posted

技术标签:

【中文标题】无法从数据存储 GAE 中检索数据【英文标题】:not able to retrieve data from datastore GAE 【发布时间】:2015-12-23 05:55:32 【问题描述】:

我有一个班级用户

class User(db.Model):
  userId = db.StringProperty()
  email = db.StringProperty()
  channelToken = db.StringProperty()

我用

插入了一条记录
user = User(key_name='1',userId='1',email='abc@gmail.com',channelToken='123')
user.put()

完美插入。但是现在当我尝试检索它时,它显示错误

channelToken= db.GqlQuery("SELECT channelToken FROM User WHERE userId=1") 
logging.info("Found Channel : " + str(channelToken))

它正在显示

<google.appengine.ext.db.GqlQuery object at 0xfe112370>" is not a string.

我是不是做错了什么?

【问题讨论】:

就像答案所说,get() 返回一个实例,.fetch() 返回找到的实例列表。 如果你知道你的用户ID是唯一的,然后将用户ID存储在key_name中,然后使用get而不是执行查询,你就不必担心最终的一致性。 【参考方案1】:

转介https://cloud.google.com/appengine/docs/python/datastore/gqlqueryclass#GqlQuery

q = db.GqlQuery("SELECT channelToken FROM User WHERE userId=1") 
channelToken = q.get()

日志记录提供了一个内存位置,因为 GqlQuery 返回一个对象。

【讨论】:

谢谢!这是有效的。如何删除特定记录? 请参阅此处的文档:cloud.google.com/appengine/docs/python/datastore/…【参考方案2】:

您也可以使用gql

channelToken = User.gql("WHERE userId = :1", "1").get().channelToken

删除所有userId = 1的记录

users = User.gql("WHERE userId = :1", "1").fetch()
for user in users:
    user.key.delete()

【讨论】:

以上是关于无法从数据存储 GAE 中检索数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Flask (python) 从 GAE 数据存储中提供图像

如何从 GAE 数据存储中导出 BLOB 类型字段?

如何通过键从 GAE 数据存储中删除多个实体

GAE 数据存储增量 ID

当我的用户使用 gae-simpleauth 登录时,如何从 Google 帐户中检索电子邮件地址并将其存储在我的应用程序的用户配置文件中?

GAE 数据存储密钥是如何生成的?