crl*_*ane 2 python database sqlite sqlalchemy
我正在编写一个使用SQLAlchemy和SQLite数据库的应用程序.我相信我的数据库,表和映射已正确配置,因为其他操作按预期工作.我正在尝试编写一个函数来检索其日期字段与作为函数参数提供的datetime.date()匹配的所有对象.这是我的第一次尝试:
def get_objects_matching_date(session,my_date):
return session.query(Table).filter(Table.date_field == my_date).all()
Run Code Online (Sandbox Code Playgroud)
事件虽然我知道Table包含符合条件的对象,但该函数不返回任何内容.
我从阅读SA文档中了解到sqlite没有本机支持date或datetime类型,并且它们存储为字符串.但SA应该处理转换(返回结果时)和(插入记录时)date或datetime对象的转换.我认为它应该能够在运行比较过滤器时处理这个问题.我已经阅读了几个不同的SO线程,并考虑使用between()过滤掉匹配的对象my_date,但是当==我正在寻找的是精确的时候,这似乎不是必要的.我也考虑过使用.filter(cast(Table.date_field,DATE) == my_date)以确保我得到对象的比较,但这似乎也没有用.
显然,我错过了关于SQLAlchemy处理日期的方式,尤其是SQLite数据库.如何Date在SQLAlchemy中存储的SQLite数据库与datetime.date()作为参数提供的对象之间获得完全匹配?谢谢你的帮助.
这可能会很晚,但它迟到总比没有好,所以它可能会让其他人受益:)
尝试将它们都投射到日期:
from sqlalchemy import Date, cast
from datetime import datetime
created_at = datetime.now().date()
query.filter(cast(Model.created_at, Date) == cast(created_at,Date))
Run Code Online (Sandbox Code Playgroud)