2013-07-25 14 views
23

Jestem nieco zdezorientowany, jeśli chodzi o filtrowanie w SQLAlchemy.Wykonywanie porównań DateTime w filtrze SQLAlchemy

Obecnie staram się odfiltrować wpisy większe niż 10 tygodni, więc mam

current_time = datetime.datetime.utcnow() 

potential = session.query(Subject).filter(Subject.time < current_time - datetime.timedelta(weeks=10)) 

Jednak potential.count() zawsze zwraca 0.

Moja teoria jest taka, że ​​nie jestem poprawnie za pomocą instrukcji filtra bo gdy próbuję użyć kolumnę, która nie jest typu Column(DateTime()) ale zamiast

Kolumna (String (250))

podobnie jak

potential = session.query(Subject).filter(Subject.string_field < current_time - datetime.timedelta(weeks=10)) 

SQLAlchemy nadal nie będzie narzekać.

Również, gdy robię ręczne sprawdzanie

curr_time - session.query(Subject).first().time > datetime.timedelta(weeks=10) 

uzyskać True co oznacza, że ​​liczba nie powinna być 0.

Czy brakuje mi czegoś oczywistego? Każda pomoc będzie doceniona.

Odpowiedz

36

Jeśli przełączyć < do > można uzyskać wszystkie przedmioty w ciągu ostatnich dziesięciu tygodni:

current_time = datetime.datetime.utcnow() 

ten_weeks_ago = current_time - datetime.timedelta(weeks=10) 

subjects_within_the_last_ten_weeks = session.query(Subject).filter(
    Subject.time > ten_weeks_ago).all() 

Filtr generuje WHERE klauzulę obejmuje wyników pasujących klauzuli. Dlatego wyniki nie są "odfiltrowywane", ale są uwzględniane.

Powiązane problemy