【问题标题】:SQLAlchemy order_by date edited and date created columns?SQLAlchemy order_by 日期编辑和日期创建列?
【发布时间】:2019-01-11 16:08:01
【问题描述】:

在我的文章模型中,我有一个 date_edited 和 date_created 列,我想按两者中最新的进行排序。有没有办法使用 SQLAlchemy order_by 来做到这一点?在这一点上,我真的很想避免改变我的模型。

【问题讨论】:

  • date_edited 如何在date_created 之前?它可以为空吗?

标签: python sql flask sqlalchemy flask-sqlalchemy


【解决方案1】:

我不太确定您的架构是什么样的,但这里有一些内容可能会让您走上寻找解决方案的正确道路:

假设您的时间戳存储为Integers 或Floats,获取两个日期中较新的日期就像查找两个数字中的较大者一样简单。

没有像数学库函数MAX(x, y) 返回x if x > y else y 那样获取两个数字中较大的一个超级简单的方法,但是您可以使用CASE 语句来模仿它:

CASE 
   WHEN (table.date_edited > table.date_created) 
     THEN table.date_edited 
   ELSE table.date_created 
END

您可以在 SQLAlchemy 中使用 case expression 来做到这一点。

from sqlalchemy import func

# [...]

myquery = myquery.order_by(
    db.case(
        [(Table.date_created > Table.date_edited, Table.date_created)], 
        else_=Table.date_edited
    )
)

为避免将来出现这种情况,您可以考虑将您的 date_edited 列设置为自动更新以在创建时自动匹配您的 date_created 列(只要 date_edited 旨在跟踪上次编辑,而不是如果有编辑的话),所以你只需要担心按date_edited 排序。 (您最初可以运行查询 UPDATE table SET date_edited=date_created WHERE date_edited=NULL; 来执行此操作,然后确保您的代码在将来保持一致)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-06
    • 2019-06-12
    • 2018-11-23
    • 2021-08-22
    • 2022-11-23
    • 2017-01-29
    • 1970-01-01
    • 2021-10-08
    相关资源
    最近更新 更多