如何获取id列表而不是SQLAlchemy对象列表?目前我这样做:
[x.id for x in random_query.all()]
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法,最好只使用SQLAlchemy语句.
为了尽可能准确地回答原始问题,您可以通过使用获得 ids 列表而不是 SQLAlchemy 对象列表with_entities()
User.query.with_entities(User.id).all()
Run Code Online (Sandbox Code Playgroud)
将其视为,而不是进行完整选择..
SELECT * FROM user
Run Code Online (Sandbox Code Playgroud)
您只选择您感兴趣的领域:
SELECT id FROM user
Run Code Online (Sandbox Code Playgroud)
老实说,您得到的是一个 1 元素元组的列表:
[(7,), (11,), (15,), (21,), (37,)]
Run Code Online (Sandbox Code Playgroud)
所以最终的答案是:
ids = [id[0] for id in User.query.with_entities(User.id).all()]
Run Code Online (Sandbox Code Playgroud)
SQLAlchemySession具有用于获取值列表而无需映射的方法标量。
SQLAlchemy 1.4+ style:
results = Session.scalars(select(Table.id)).all()
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 旧样式:
results = Session.scalars(Session.query(Table.id)).all()
results = Session.scalars(Table.query.with_entities(Table.id)).all()
Run Code Online (Sandbox Code Playgroud)
实际的results:
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
SQL
SELECT DISTINCT `id` FROM `table`;
Run Code Online (Sandbox Code Playgroud)
蟒蛇
for value in Session.query(Table.id).distinct():
#Do something Append
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10886 次 |
| 最近记录: |