sqlite 如何按年查询日期?

14ifxucb  于 2022-11-24  发布在  SQLite
关注(0)|答案(1)|浏览(349)

在SQLite Studio中对2021年或2022年中的日期执行以下查询,相应地返回所有行:

select * FROM daily_reports
WHERE strftime('%Y', daily_reports.reporting_date) in ('2021','2022');

Python中的相同查询不返回任何行,创建的where子句为... where 1 = 0

q = ...    
q = q.filter((func.strftime('%Y', DailyReportItem.reporting_date) in ['2021','2022']))

如何让它发挥作用?

jslywgbw

jslywgbw1#

问题在于,您传递给.filter()的语句没有转换成SQL,它在Python中立即被执行为false,然后作为参数传递给.filter()。
在SQLAlchemy中执行IN运算符的方式是通过DailyReportItem.reporting_date.in_(['2021', '2022'])
因此,在您的情况下,它应该是这样的:q.filter(func.strftime('%Y', DailyReportItem.reporting_date).in_(['2021', '2022']))
我宁愿只检查日期是否大于2021年初,小于2022年底。这样你也可以更好地使用索引。

相关问题