You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 20:35:18