Matt Keller
Matt Keller

Reputation: 347

How to query if entity exists in app engine NDB

I'm having some trouble wrapping my head around NDB. For some reason it's just not clicking. The thing i'm struggling with the most is the whole key/kind/ancestor structure.

I'm just trying to store a simple set of Json data. When i store data, i want to check beforehand to see if a duplicate entity exists (based on the key, not the data) so i don't store a duplicate entity.

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

Then, to store data:

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

So my questions are:

  1. How do i check to see if that particular key exists before i insert more data?

  2. How would i go about pulling that data out to read based on the key?

Upvotes: 1

Views: 4398

Answers (2)

Matt Keller
Matt Keller

Reputation: 347

After some trial and error, and with the assistance of voscausa, here is what i came up with to solve the problem. The data is being read in via a for loop.

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()

Upvotes: 3

voscausa
voscausa

Reputation: 11706

Because you do not provide a full NDB key (only a parent) you will always insert a unique key. But you use your own entity id for the parent? Why?

I think you mean:

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

To get it, you can use:

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

Here you can find two excellent videos about the datastore, strong consistency and entity groups. Datastore Introduction and Datastore Query, Index and Transaction.

Upvotes: 2

Related Questions