SQLAlchemy 从查询中获取ID列表

17 投票
6 回答
36748 浏览
提问于 2025-04-18 12:02

我想要获取一个ID的列表,而不是SQLAlchemy对象的列表。现在我这样做:

[x.id for x in random_query.all()]

有没有更好的方法来实现这个,最好只用SQLAlchemy的语句。

6 个回答

2

在使用 SQLAlchemy 1.4 及以上版本时,你可以使用一种叫做 核心风格的选择语法 来进行数据查询:

ids = session.execute(select(MyModel.spam).distinct()).all()
3
session.query(Thing.id).all()

通常情况下,你查询的是整个对象,但你也可以只查询某些属性。

7

SQLAlchemy 的 Session 有一个叫 scalars 的方法,可以用来获取一系列值,而不需要进行映射。

SQLAlchemy 1.4+ style:
results = Session.scalars(select(Table.id)).all()

SQLAlchemy 的旧风格:

results = Session.scalars(Session.query(Table.id)).all()
results = Session.scalars(Table.query.with_entities(Table.id)).all()

实际的 results

[1, 2, 3, 4, 5]
7

为了尽量准确地回答原问题,你通过使用 with_entities() 得到的是一系列的 ID,而不是一系列的 SQLAlchemy 对象

User.query.with_entities(User.id).all()

可以把它想象成,你并不是在做一个完整的选择查询……

SELECT * FROM user

而是只选择你感兴趣的某些字段:

SELECT id FROM user

老实说,你得到的是一个只有一个元素的元组列表:

[(7,), (11,), (15,), (21,), (37,)]

所以最终的答案是

ids = [id[0] for id in User.query.with_entities(User.id).all()]
15

SQL 是一种用于管理和操作数据库的语言。简单来说,它就像是和数据库对话的工具,你可以用它来查询数据、更新数据或者删除数据。

 SELECT DISTINCT `id` FROM `table`;

Python 是一种编程语言,特别适合初学者。它的语法简单明了,像是用英语写代码一样。你可以用 Python 来做很多事情,比如数据分析、网页开发、人工智能等等。

 for value in Session.query(Table.id).distinct():
     #Do something Append

撰写回答