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 カーソルと、ステートメントがどのように構築されたかに関するコンテキスト情報に固有のものです。query.statement から取得するには、Session.execute() を使用します。ただし、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]