SQLAlchemy - 以与 IN 子句相同的顺序获取查询结果

Fra*_*tia 3 python sql postgresql sqlalchemy

我有一份球队名单。对于列表中的每个团队名称,我想从数据库中获取行,但我只想对数据库进行一次调用,并且 sql alchemy 对象列表需要保留原始列表的顺序。我将在原始列表中出现重复的名字。

我需要这样的东西,但是可以工作(我正在执行的查询显然不起作用,因为它返回按 id 排序的所有内容)

teams_names = ['Liverpool', 'Arsenal', 'Utd', 'Liverpool']
Session.query(Team).filter(Team.name.in_(teams_names)).all()
teams_sa_obj = [#sa_liverpool, #sa_arsenal, #sa_utd, #sa_liverpool]
Run Code Online (Sandbox Code Playgroud)

uni*_*rio 6

我通常用 Python 进行重新排序。这个想法是,构建一个名称到Team对象的映射,然后在迭代原始列表时查找它们:

q = Session.query(Team).filter(Team.name.in_(teams_names))
team_map = {t.name: t for t in q}
teams = [team_map[n] for n in teams_names]
Run Code Online (Sandbox Code Playgroud)

有 SQL 端解决方案,但使用 SQLAlchemy 来实现这些解决方案有点尴尬。