2015-03-04 6 views
6

in meiner Tabellendefinition zu vergleichen, habe ich eine Spalte wie folgt definiert:sqlalchemy Filter durch datetime.now() und Spalte Standarddatum

created_date = Column(DateTime, nullable=False, default=datetime.now) 

Ich möchte ein Beispiel abfragen, wenn dessen Erstellungsdatum zu Strom, der gleich ist Datum (zB wenn es heute erstellt wird).

so habe ich versucht, so etwas wie dieses:

res = session.query(Object).filter(datetime.now() == Object.created_date) 

es funktioniert nie, weil zwei Daten in Sekunden verglichen ich denke, so werden sie nie einander gleich sein. Ich habe versucht, dann das:

res = session.query(Object).filter((datetime.now() - Object.created_date).days < 1) 

während (datetime.now() - datetime.now()).days Werke in Python, es tut hier in meiner Situation zu arbeiten. Ich habe Fehler sagt: Weder 'BinaryExpression' Objekt noch 'Comparator' Objekt hat ein Attribut 'Tage'.

Also, wie soll ich eine Abfrage, die Instanzen an einem aktuellen Tag erstellt filtert? Vielen Dank!

+0

gut, tut es praktisch arbeiten. indem ich sage, dass es funktioniert, meine ich, dass es einen Wert zurückgibt, der -1 ist. –

+0

welche Datetime-Bibliothek und welche Version von Python verwenden Sie? Ich glaube nur nicht, dass es ein 'days' Attribut für die 'datetime' Instanz gibt. –

Antwort

3

Ich bezweifle, dass (datetime.now() - datetime.now()).days funktioniert seit datetime.datetime Instanz nur Attribut namens day anstatt days. Mit datetime.now().days würde in AttributeError: 'datetime.datetime' object has no attribute 'days'

Sie könnten versuchen, diese:

from datetime import timedelta 

res = session.query(Object).filter(
    (Object.created_date+timedelta(days=1))>datetime.now()) 
+0

ja! das funktioniert perfekt! Ich mache 'von Datetime Import Datetime' und benutze Python 2.7. 'datetime.now() - datetime.now()' wird zu einem Timedelta-Objekt mit dem Attribut 'days'. danke für Ihre Hilfe! –

+0

@shangyeshen Hoppla, sieht aus wie '(datetime.now() - datetime.now()). Tage arbeiten. Ihr Ursprungscode ergibt also Fehler, weil 'datetime.now()' nicht wirklich mit 'Object.created_date' mit SQLAlcehmys' DateTime' Typ kompatibel ist? Muss untersucht werden ... –