【问题标题】:not able to retrieve data from datastore GAE无法从数据存储 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而不是执行查询,你就不必担心最终的一致性。

标签: python google-app-engine google-cloud-datastore


【解决方案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 返回一个对象。

【讨论】:

【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多