我需要在 SQLalchemy 中使用 MySQL 数据库实现此过滤器
dmb.manifest_date >= (CURDATE() - interval 7 day)
我所做的是
date_filter=(datetime.today()-timedelta(days=7)).strftime('%Y-%m-%d')
.filter(DayManifestBatch.manifest_date>= cast(date_filter,DATE))
我从 SQLALchemy 导入了 DATE 并进行了转换。还尝试过仅使用字符串日期和日期时间格式,但我总是收到此错误
sqlalchemy.exc.ArgumentError: SQL expression object expected, got object of type <class 'flask_sqlalchemy.model.DefaultMeta'> instead
可能有更好的方法,但你可以使用:
from sqlalchemy import text
.filter(DayManifestBatch.manifest_date >= text('CURDATE() - INTERVAL 7 DAY'))
更多的Python代码版本是:
import sqlalchemy as sa
from datetime import timedelta
.filter(DayManifestBatch.manifest_date >= sa.func.curdate() - timedelta(days=7))
注意:由于
timedelta
的限制,不可能使用大于天的单位。然后,必须回退到 sa.text
的间隔,如 sa.text("INTERVAL '1 MONTH'")
。