2013-07-25 3 views
23

Sono un po 'confuso riguardo al filtro in SQLAlchemy.Confronto di DateTime nel filtro SQLAlchemy

Io attualmente sto cercando di filtrare le voci maggiori di 10 settimane, così ho

current_time = datetime.datetime.utcnow() 

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

Tuttavia, il potential.count() restituisce sempre 0.

mia teoria è che non sto usando la dichiarazione del filtro correttamente perché quando cerco di utilizzare una colonna che non è di tipo Column(DateTime()) ma invece

Colonna (String (250))

come

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

SQLAlchemy non si lamenterà ancora.

Inoltre, quando faccio un controllo manuale con

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

ottengo True il che implica che il conteggio non dovrebbe essere 0.

Mi manca qualcosa di ovvio? Qualsiasi aiuto sarebbe apprezzato.

risposta

36

Se si passa il < ad un > è possibile ottenere tutti i soggetti nelle ultime dieci settimane:

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

filtro genera una clausola che WHEREinclude risultati corrispondenti alla clausola. Quindi i risultati non sono "filtrati" ma sono inclusi.