无法在 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()