在某些情况下,我发现ResultProxy
使用起来比 ORM 结果更方便(据我了解的文档,我可以迭代完整表中的列)。我试过这个:
query = session.query(Table1)
results = [ResultProxy(a) for a in query]
...但失败:
AttributeError: 'Table1' object has no attribute 'dialect'
在某些情况下,我发现ResultProxy
使用起来比 ORM 结果更方便(据我了解的文档,我可以迭代完整表中的列)。我试过这个:
query = session.query(Table1)
results = [ResultProxy(a) for a in query]
...但失败:
AttributeError: 'Table1' object has no attribute 'dialect'
您不能像那样只实例化一个 ResultProxy,它特定于 DBAPI 游标以及有关如何构造语句的上下文信息。使用 Session.execute() 从 query.statement 中获取一个。不过,向 Query 添加一个方法来提供它直接使用的 ResultProxy 并不难。
快速回答:
conn = engine.connect()
result_proxy = conn.execute(query.selectable)
您还可以按名称获取列索引...
col_index = query.selectable.columns.keys().index(id_column_name)
...然后通过它的索引得到结果:
first_row_col_content = query.all()[0][col_index]