【问题标题】:How to use db functions in Tortoise ORM如何在 Tortoise ORM 中使用 db 函数
【发布时间】: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


    【解决方案1】:

    不幸的是,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。

    【讨论】:

    猜你喜欢
    • 2020-08-30
    • 2021-01-17
    • 2021-04-19
    • 2020-08-30
    • 2023-02-12
    • 2023-03-22
    • 2020-12-01
    • 2022-08-20
    • 2021-02-06
    相关资源
    最近更新 更多