【发布时间】:2015-03-29 06:19:13
【问题描述】:
我正在使用这个查询
users = User.query.filter(User.id.in_(user_ids)).all()
我想以与user_ids 相同的顺序获取users。无论如何我可以直接在查询中执行此操作还是必须再次对其进行排序?另外,如果我必须再次对其进行排序,那么基于另一个 ID 列表对对象列表进行排序的 Pythonic 方式是什么。
【问题讨论】:
-
好吧,我找到了排序它的pythonic方式。 users.sort(key=lambda x: user_ids.index(x.id)) 但仍在寻找是否可以直接在查询中进行
-
所以您的
user_ids具有任意顺序(不一定已排序),并且您想根据User.id列和user_ids列表对SQL 结果进行排序? IE。不只是ORDER BY "User.id"? -
好吧,除非您添加
.order_by()子句,否则结果将按插入顺序排列。 如果您的user_ids已经排序,那么添加.order_by(User.id)子句显然与user_ids排序具有相同的效果(忽略排序细节)。但如果不是,并且您仍然想按它排序,那么直接在 SQL 中执行会非常复杂,所以我会在 Python 中对它们进行排序。 -
不客气。我假设在 SQL 中执行此操作可以通过使用hybrid properties 来实现,但我想这可能以跨数据库可移植方式实现相当棘手。
-
如果将 MySQL 计入...
标签: python list sorting sqlalchemy