如何在Tortoise-ORM中用日期筛选DateTime类型字段?
解决Tortoise-ORM中按日期筛选DatetimeField字段的问题
你的问题出在直接用date类型和DatetimeField字段比较——数据库里的date字段存储的是包含时分秒的完整时间,直接匹配today(日期对象)时,数据库会自动把today转成当天0点的datetime,只有刚好在0点创建的记录才会被命中,自然返回空列表。
下面是两种可行的实现方式:
方式一:按时间范围筛选
计算当天的起始和结束时间,筛选落在这个区间内的记录:
from datetime import datetime, timedelta async def get_today_announcement(self): today = datetime.now().date() start_of_day = datetime.combine(today, datetime.min.time()) end_of_day = start_of_day + timedelta(days=1) return await self.model.filter( date__gte=start_of_day, date__lt=end_of_day ).all()
方式二:利用Tortoise-ORM的字段查找器
Tortoise-ORM支持__date查找器,可以直接提取DatetimeField的日期部分进行匹配,代码更简洁:
from datetime import datetime async def get_today_announcement(self): today = datetime.now().date() return await self.model.filter(date__date=today).all()
这种方式底层会自动转换成数据库对应的日期提取函数(比如MySQL/PostgreSQL的DATE()函数),兼容性良好,推荐使用。
内容的提问来源于stack exchange,提问作者Diegol
相关产品推荐
相关产品推荐

