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.
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.