2015-03-04 9 views
6

w mojej definicji tabeli, mam kolumna zdefiniowana tak:filtr sqlalchemy porównując DateTime.Now() i domyślne kolumny dat

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

chcę zapytać instancji, gdy jego data tworzony jest równa prądu data (np. jeśli jest tworzona dzisiaj).

więc próbowałem coś takiego:

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

to nigdy nie działa, ponieważ dwie daty są porównywane w sekundach Myślę, więc nigdy nie będą sobie równe. Potem próbowałem to:

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

podczas gdy (datetime.now() - datetime.now()).days prace w Pythonie, ale to nie działa w mojej sytuacji tutaj. Mam błąd: ani obiekt "BinaryExpression", ani obiekt "Komparator" nie ma atrybutu "dni".

Jak zatem wykonać zapytanie, które filtruje instancje utworzone w bieżącym dniu? dzięki!

+0

dobrze, ale to nie działa właściwie. mówiąc, że działa, oznacza to, że zwróci wartość, która wynosi -1. –

+0

jakiej biblioteki datetime i której wersji Pythona używasz? Po prostu nie sądzę, że istnieje atrybut 'days' dla instancji' datetime' instancji –

Odpowiedz

3

Wątpię, czy (datetime.now() - datetime.now()).days działa od datetime.datetime instancja ma tylko atrybut o nazwie day zamiast days. Korzystanie datetime.now().days skutkowałoby AttributeError: 'datetime.datetime' object has no attribute 'days'

Można spróbować to:

from datetime import timedelta 

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

yes! to działa idealnie! Robię "z datetime import datetime" i używać Pythona 2.7. 'datetime.now() - datetime.now()' stanie się obiektem timedelta, który ma atrybut 'days'. dzięki za pomoc! –

+0

@shangyeshen Ups, wygląda jak '(datetime.now() - datetime.now()). Days' działa. Tak więc twój kod źródłowy generuje błędy, ponieważ 'datetime.now()' nie jest tak naprawdę kompatybilny z 'Object.created_date' z typem' DateTime' SQLAlcehmy? Należy zbadać ... –

Powiązane problemy