在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']))
如何让它发挥作用?
1条答案
按热度按时间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年底。这样你也可以更好地使用索引。