Faire des comparaisons DateTime dans le filtre SQLAlchemy

Je suis un peu confus au sujet du filtrage dans SQLAlchemy.

J'essaie actuellement de filtrer les entrées supérieures à 10 semaines, donc j'ai

current_time = datetime.datetime.utcnow()

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

Cependant, le potential.count() renvoie toujours 0.

Ma théorie est que je n'utilise pas correctement l'instruction filter car lorsque j'essaie d'utiliser une colonne qui n'est pas de type Column(DateTime()) mais plutôt

Colonne (Chaîne (250))

Comme

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

SQLAlchemy ne se plaindra toujours pas.

Aussi, quand je fais une vérification manuelle avec

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

Je reçois True ce qui implique que le compte ne devrait pas être 0.

Est-ce que je manque quelque chose d'évident? Toute aide serait appréciée.

26
demandé sur user1431282 2013-07-26 01:06:22

1 réponses

Si vous passez le < à un > Vous pouvez obtenir tous les sujets au cours des dix dernières semaines:

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

Le filtre génère une clause WHEREQui inclut les résultats correspondant à la clause. Si les résultats ne sont pas "filtrés", mais sont inclus.

44
répondu Ian Wilson 2013-07-26 07:11:54