2017-02-19 1 views
0

Ich benutze Python auf GAE.
Ich habe eine Abfrage, wo ich ein Feld gegen Wert aus einer Liste kommen muss. Meine Einheit wie folgt aussieht:gae ndb Abfrage mehrere Werte

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

Ich möchte eine Abfrage auszuführen, die wie (MySQL wie Beispiel) aussieht:

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

Die Liste [12,34,67] ist nur ein Beispiel. Die Liste kann leer sein oder N ganze Zahlen enthalten. Wie erstelle ich die richtige ndb-Abfrage?
Für das Jahr/Monat/DAY_OF_MONTH verwende ich

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

und es funktioniert gut. Jetzt muss ich mit einer Liste ‚class_id‘ passen

Antwort

1

Versuchen Sie, diese

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

was ist mit der Liste int? Wie wird es in der Abfrage dargestellt? – balderman

+0

Ich habe die Antwort aktualisiert und ich denke, das wird für int funktionieren. –

0

Warum nicht Datetime-Eigenschaft verwenden.

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) 

Es nutzt die Python Datetime-Format standardmäßig. Viel schnellere Abfragen, die andere Datetime-Operationen als mehrere ANDs oder Filter unterstützen.

Verwandte Themen