在 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']))
任何想法要改變什么才能讓它發揮作用,我們將不勝感激!
uj5u.com熱心網友回復:
問題是您傳遞給 .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 年末。這樣您還可以更好地使用索引。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537536.html
標籤:python-3.xsqlite烧瓶炼金术flask-sql炼金术
上一篇:Java類如何擴展Kotlin庫
