web-dev-qa-db-fra.com

Faire des comparaisons DateTime dans Filter SQLAlchemy

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

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

current_time = datetime.datetime.utcnow()

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

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

Ma théorie est que je n'utilise pas correctement l'instruction de filtrage parce que lorsque j'essaie d'utiliser une colonne qui n'est pas de type Column(DateTime()) mais à la place

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)

J'obtiens True ce qui implique que le nombre ne doit pas être 0.

Suis-je en train de manquer quelque chose d'évident? Toute aide serait appréciée.

32
user1431282

Si vous changez 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 WHERE qui inclut résultats correspondant à la clause. Les résultats ne sont donc pas "filtrés" mais sont inclus.

53
Ian Wilson