SQLAlchemy 从查询中获取ID列表
我想要获取一个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