在我的文章模型中,我有一个date_edited和date_created列,我想按这两个列中最新的一个排序。有没有一种方法可以使用SQLAlchemy order_by来做到这一点?我真的很想避免在这一点上改变我的模型。
我不太确定你的模式是什么样子的,但这里有一些东西可能会让你走上寻找解决方案的正确道路:
假设您的时间戳存储为Integer
s或Float
s,那么获取两个日期中较新的日期就像查找两个数字中较大的一个一样简单。
没有一种非常简单的方法可以像数学库函数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中的事例表达式来完成此操作。
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;
来完成最初的操作,然后确保您的代码在将来保持一致(。