Search code examples
pythongoogle-app-enginegoogle-cloud-datastoreapp-engine-ndb

How to make query of AND & OR operation from list of elements we we to search in ndb datastore using python in Google App Engine


I have a list of keys of different model entities. Example:-

list_1 = ['<entity key of model 1>', '<entity key of model 2>', '<entity key of model 3>']

i want to query that dynamically forms AND operation from the list.

Example:-

query = <SOME MODEL>.query(ndb.AND(<SOME MODEL>.entity == list_1[0], <SOME MODEL>.entity == list_1[1], <SOME MODEL>.entity == list_1[2]))

Any help to do such kind of query.


Solution

  • If Model.entity in your example isn't a repeated property, then this query makes no sense, but something like this will do what you want:

    q = Model.query()
    for item in list_1:
      q = q.filter(Model.entity == item)
    

    If you want it in one line, then something like this:

    q = Model.query(ndb.AND(*(Model.entity == item for item in list_1)))