Python 在SQLAlchemy中查询属性列表而不是元组

Python 在SQLAlchemy中查询属性列表而不是元组,python,sqlalchemy,Python,Sqlalchemy,我正在查询一个模型的ID,并得到一个(int,)元组列表,而不是ID列表。有没有直接查询属性的方法 result = session.query(MyModel.id).all() 我意识到这是可能的 results = [r for (r,) in results] 查询是否可以直接返回该表单,而不必自己处理它?当传入ORM插入指令的描述符(如列)时,每个结果都是一个命名元组,即使只是一列。您可以在列表理解中使用列名来“展平”列表(您可以删除.all()调用,迭代也会检索对象): 或者在循

我正在查询一个模型的ID,并得到一个
(int,)
元组列表,而不是ID列表。有没有直接查询属性的方法

result = session.query(MyModel.id).all()
我意识到这是可能的

results = [r for (r,) in results]

查询是否可以直接返回该表单,而不必自己处理它?

当传入ORM插入指令的描述符(如列)时,每个结果都是一个命名元组,即使只是一列。您可以在列表理解中使用列名来“展平”列表(您可以删除
.all()
调用,迭代也会检索对象):

或者在循环
for
循环时使用它是一个元组的事实,并将其解包到目标的单个元素元组:

result = session.query(MyModel.id)
for id, in result:
    # do something with the id
后者也可用于列表理解:

[id for id, in session.query(MyModel.id)]

您实际上没有任何选项来强制行结果仅为单个
id
值。

奇怪的是,SQLalchemy没有提供正确的解决方案。在sqlalchemy中,如果选择一个成员变量(如列),则每个结果都是一个命名元组,如@Martijn所说。我使用python的zip函数找到了一个解决方案

压缩法

邮政编码(seq1[,seq2[…])->[(seq1[0],seq2[0]…),(…)] 返回元组列表,其中每个元组包含第i个元素 从每个参数序列。返回的列表被截断 长度为最短参数序列的长度

来看看你的例子

result = session.query(MyModel.id).all()
result = zip(*result)[0]
输出:

[id1, id2, id3...]
它将如何工作?如果您像下面这样传递列表,它将压扁作为参数给出的元组列表

[(key11, key21), (key12,key22)]
Zip将把这个元组列表转换为

[(key11, key12), (key21, key22)]
在本例中,您需要MyModel的每个tupe初始值,以便可以从列表中获取第0个tuple

链法 输出

[id1, id2, id3]
[id1, id2, id3]
For循环 输出

[id1, id2, id3]
[id1, id2, id3]
炼金术

q_stringlist = [q[0] for q in db.session.query((distinct(Table.column))).all()]   

相关的可能重复的BTW
[id for id,in session.query(MyModel.id)]
也可以工作->no all()调用。根据SQLAlchemy文档,最好像这样迭代。这是它得到的最好的结果(伊姆霍:)。谢谢,这非常有帮助。这是一个非常常见的用例,我很困惑为什么SQLAlchemy没有让这变得更容易。
q_stringlist = [q[0] for q in session.query((distinct(Table.column))).all()]                                                        
q_stringlist = [q[0] for q in db.session.query((distinct(Table.column))).all()]