无法在 Datastore 中检索具有生成 ID 的实体
Cannot retrieve entity with generated id in Datastore
我正在以一种非常简单的方式使用 Google 云数据存储,我尝试通过其 ID 检索实体。我读过 this(它在 Java 但似乎遵循相同的逻辑)
我的实体的定义在这里:
class Logs(ndb.Model):
startDate = ndb.DateTimeProperty()
endDate = ndb.DateTimeProperty()
requestedDate = ndb.DateProperty()
taskName = ndb.StringProperty()
status = ndb.StringProperty()
然后当我插入一个新的时
logs = Logs(startDate=datetime.utcnow(),
taskName=taskName,
requestedDate=requestedDate,
status=u'IN_PROGRESS')
key = logs.put()
id = key.id() # I use this variable later
当我想取回它时
logs = Logs.get_by_id(id)
但它从未returns任何实体...
这有什么问题吗?
感谢您的帮助
根据 documentation,您应该能够直接从 Key 对象调用 get() 以从 Datastore 检索实体:
logs_entity = Logs(startDate=datetime.utcnow(),
taskName=taskName,
requestedDate=requestedDate,
status=u'IN_PROGRESS')
# Saves entity to Datastore and returns Key
entity_key = logs_entity.put()
# Retrieves entity from Datastore using the previous Key
result = entity_key.get()
编辑:
如果您需要将密钥作为字符串传递以稍后重建密钥对象,您可以尝试使用 urlsafe() 方法,该方法允许将其嵌入 URL:
urlsafe_string = entity_key.urlsafe()
[...]
entity_key= ndb.Key(urlsafe=urlsafe_string)
logs_entity = entity_key.get()
我正在以一种非常简单的方式使用 Google 云数据存储,我尝试通过其 ID 检索实体。我读过 this(它在 Java 但似乎遵循相同的逻辑)
我的实体的定义在这里:
class Logs(ndb.Model):
startDate = ndb.DateTimeProperty()
endDate = ndb.DateTimeProperty()
requestedDate = ndb.DateProperty()
taskName = ndb.StringProperty()
status = ndb.StringProperty()
然后当我插入一个新的时
logs = Logs(startDate=datetime.utcnow(),
taskName=taskName,
requestedDate=requestedDate,
status=u'IN_PROGRESS')
key = logs.put()
id = key.id() # I use this variable later
当我想取回它时
logs = Logs.get_by_id(id)
但它从未returns任何实体...
这有什么问题吗?
感谢您的帮助
根据 documentation,您应该能够直接从 Key 对象调用 get() 以从 Datastore 检索实体:
logs_entity = Logs(startDate=datetime.utcnow(),
taskName=taskName,
requestedDate=requestedDate,
status=u'IN_PROGRESS')
# Saves entity to Datastore and returns Key
entity_key = logs_entity.put()
# Retrieves entity from Datastore using the previous Key
result = entity_key.get()
编辑:
如果您需要将密钥作为字符串传递以稍后重建密钥对象,您可以尝试使用 urlsafe() 方法,该方法允许将其嵌入 URL:
urlsafe_string = entity_key.urlsafe()
[...]
entity_key= ndb.Key(urlsafe=urlsafe_string)
logs_entity = entity_key.get()