在 SQLAlchemy 中使用日期和间隔的正确方法是什么?

问题描述 投票:0回答:2

我需要在 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
python mysql sqlalchemy flask-sqlalchemy
2个回答
1
投票

可能有更好的方法,但你可以使用:

from sqlalchemy import text

.filter(DayManifestBatch.manifest_date >= text('CURDATE() - INTERVAL 7 DAY'))

0
投票

更多的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'")

© www.soinside.com 2019 - 2024. All rights reserved.