如何查询app引擎NDB中是否存在实体

时间:2014-04-12 20:16:53

标签: python google-app-engine app-engine-ndb

我在绕过NDB时遇到了一些麻烦。出于某种原因,它只是没有点击。我最挣扎的是整个关键/善良/祖先结构。

我只是想存储一组简单的Json数据。当我存储数据时,我想事先检查是否存在重复实体(基于密钥,而不是数据),因此我不会存储重复的实体。

class EarthquakeDB(ndb.Model):
  data = ndb.JsonProperty()
  datetime = ndb.DateTimeProperty(auto_now_add=True)

然后,存储数据:

quake_entry = EarthquakeDB(parent=ndb.Key('Earthquakes', quake['id']), data=quake).put()

所以我的问题是:

  1. 在插入更多数据之前,如何查看该特定密钥是否存在?

  2. 我如何根据密钥将数据拉出来阅读?

2 个答案:

答案 0 :(得分:2)

因为您没有提供完整的NDB密钥(只有父密钥),所以您将始终插入唯一密钥。 但是您为父母使用自己的实体ID?为什么呢?

我认为你的意思是:

quake_entry = EarthquakeDB(id=quake['id'], data=quake)
quake_entry.put()

要获得它,您可以使用:

quate_entry = ndb.Key('Earthquakes', quake['id']).get()

在这里,您可以找到两个关于数据存储,强一致性和实体组的优秀视频。 Datastore IntroductionDatastore Query, Index and Transaction.

答案 1 :(得分:2)

经过一些试验和错误,并在voscausa的帮助下,我想出了解决问题的方法。正在通过for循环读入数据。

for quake in data:
  quake_entity = EarthquakeDB.get_by_id(quake['id'])
  if quake_entity:
    continue
  else:
    quate_entity = EarthquakeDB(id=quake['id'], data=quake).put()