sqlalchemy:UNION 之后的订单查询



我有两个不同的表,但两个表都有一个日期对象。我想同时查询两个表,以获取按日期排序的混合对象列表。我需要一步完成此操作,以便我可以使用分页命令。我不能只查询两个列表,然后将它们合并。

更新:我试过

dummy = query1.union(query2).order_by('date').all()

但这导致

ArgumentError: All selectables passed to CompoundSelect must have identical numbers of columns; select #1 has 8 columns, select #2 has 24

谢谢卡尔

这不是一个完美的解决方案,因为它需要深入研究SQLAlchemy内部。但它似乎有效。也许有人可以帮助完成它并使其更强大。

# You need to have Model.date in both query1 and query2. 
# No promises if your models are complex or have multiple columns called dates or something!
from sqlalchemy import text
base_query = query1.union(query2)
ordered_query = base_query.order_by(text(f"{next(i for i in base_query.column_descriptions if i['name']=='date')['expr'].name} desc"))

最新更新