2017-02-19 2 views
0

Я использую python для GAE.
У меня есть запрос, в котором мне нужно сопоставить поле со значением, входящим в список. Моя сущность выглядит следующим образом:gae ndb query несколько значений

class TimeTableChange(ndb.Model): 
    """A Change entry.""" 
     details = ndb.StringProperty() 
     class_label = ndb.StringProperty() 
     class_id = ndb.IntegerProperty() 
     year = ndb.IntegerProperty() 
     month = ndb.IntegerProperty() 
     day_of_month = ndb.IntegerProperty() 
     hour = ndb.IntegerProperty() 
     type = ndb.StringProperty() 
     ts = ndb.IntegerProperty() 

Я хотел бы выполнить запрос, который выглядит как (MySQL, как, например):

select * from TimeTableChange 
where year = 2017 and month = 8 and day_of_month = 12 and class_id IN [12,34,67] 

Список [12,34,67] это просто example.The может быть пустым или содержать N целых чисел. Как создать правильный запрос ndb?
За год/месяц/DAY_OF_MONTH Я использую

query = query.filter(ndb.AND(TimeTableChange.year == tomorrow.year, 
            TimeTableChange.month == tomorrow.month, 
            TimeTableChange.day_of_month == tomorrow.day)) 

и она отлично работает. Теперь мне нужно, чтобы соответствовать «class_id» со списком

ответ

1

Попробуйте

query = query.filter(ndb.AND(ndb.AND(TimeTableChange.year == tomorrow.year, 
            TimeTableChange.month == tomorrow.month, 
            TimeTableChange.day_of_month == tomorrow.day), TimeTableChange.class_id.IN([12, 34, 67]))) 
+0

Что относительно списка int? Как он представлен в запросе? – balderman

+0

Я обновил ответ, и я думаю, что это будет работать для int. –

0

Почему бы не использовать DateTime свойства.

https://cloud.google.com/appengine/docs/standard/python/ndb/entity-property-reference#Date_and_Time

class TimeTableChange(ndb.Model): 
    created_at = ndb.DateTimeProperty() 

from datetime import datetime 
dateobj = datetime.strptime('Aug 12 2017 1:33PM', '%b %d %Y %I:%M%p') 
query = TimeTableChange.query(TimeTableChange.created_at >= dateobj) 

Он использует формат Python DATETIME по умолчанию. Гораздо быстрее запросы, которые поддерживают другие операции с датой, чем несколько И или фильтров.

Смежные вопросы