首页 > 解决方案 > 如何在 Tortoise ORM 中使用 db 函数

问题描述

我正在尝试编写一个简单的查询,但使用 PSQL 函数 CURRENT_DATE 和 INTERVAL,例如:

users = await User.filter(created_at__gt="CURRENT_DATE - INTERVAL '30 DAYS'")

如何让它发挥作用?谢谢

标签: pythonsqldatabasepsqltortoise-orm

解决方案


不幸的是,Tortoise ORM 以不同的方式处理不同的查询。例如:

  • 对于update查询,您可以只使用一个字符串值:
await User.filter(id=user_id).update(updated_at="now()")
  • 对于filter您可以使用的查询pypika.functionspypika.terms 例如:
from pypika.terms import Parameter, Interval

await User.filter(created_at__gte=Parameter("CURRENT_DATE") - Interval(days=30))
  • 对于create查询,这非常棘手。tortoise.fields.data.DateFieldTortoise ORM 不是为此而构建的,您需要做的是通过继承ortortoise.fields.data.DateTimeField和覆盖to_db_value方法来创建自己的字段类型类。

长话短说,这是可能的,但非常棘手,特别是如果您想使用所有 3 种类型的查询:CREATE、UPDATE 和 SELECT。


推荐阅读