【发布时间】:2021-05-03 04:08:46
【问题描述】:
我正在尝试编写一个简单的查询,但使用 PSQL 函数 CURRENT_DATE 和 INTERVAL,例如:
users = await User.filter(created_at__gt="CURRENT_DATE - INTERVAL '30 DAYS'")
如何让它发挥作用?谢谢
【问题讨论】:
标签: python sql database psql tortoise-orm
我正在尝试编写一个简单的查询,但使用 PSQL 函数 CURRENT_DATE 和 INTERVAL,例如:
users = await User.filter(created_at__gt="CURRENT_DATE - INTERVAL '30 DAYS'")
如何让它发挥作用?谢谢
【问题讨论】:
标签: python sql database psql tortoise-orm
不幸的是,Tortoise ORM 以不同的方式处理不同的查询。 例如:
update 查询,您可以只使用字符串值:await User.filter(id=user_id).update(updated_at="now()")
filter 查询,您可以使用pypika.functions 和pypika.terms
例如:from pypika.terms import Parameter, Interval
await User.filter(created_at__gte=Parameter("CURRENT_DATE") - Interval(days=30))
create 查询非常棘手。 Tortoise ORM 不是为此而构建的,您需要做的是通过继承 tortoise.fields.data.DateField 或 tortoise.fields.data.DateTimeField 并覆盖 to_db_value 方法来创建自己的字段类型类。长话短说,这是可能的,但非常棘手,特别是如果您想使用所有 3 种类型的查询:CREATE、UPDATE 和 SELECT。
【讨论】:
pypika-tortoise 作为依赖,所以它应该和你的tortoise 包一起安装:github.com/tortoise/tortoise-orm/blob/develop/…。你能检查一下你的包文件夹吗?这是 pypika 包:github.com/tortoise/pypika-tortoise/tree/main/pypika