24

session.query を使用していたとき、結果を dicts のリストに変換できました。

my_query = session.query(table1,table2).filter(all_filters)
result_dict = [u.__dict__ for u in my_query.all()]

しかし、SELECT()操作を行う必要があるので、結果を次のようなdictに変換するにはどうすればよいですか?

[{'Row1column1Name' : 'Row1olumn1Value', 'Row1column2Name' :'Row1Column2Value'},{'Row2column1Name' : 'Row2olumn1Value', 'Row2column2Name' : 'Row2Column2Value'},etc....].

これは私の SELECT() コードです:

select = select([table1,table2]).where(all_filters)
res = conn.execute(select)
row = res.fetchone() #I have to use fetchone() because the query returns lots of rows
resultset=[]
while row is not None:
    row = res.fetchone()
    resultset.append(row)

print resultset

結果は次のとおりです。

[('value1', 'value2', 'value3', 'value4'),(.....),etc for each row]

私はPythonが初めてなので、助けていただければ幸いです。

4

5 に答える 5

31

これは RowProxy オブジェクトのようです。試す:

row = dict(zip(row.keys(), row))
于 2013-10-16T22:42:31.630 に答える
18

選択結果の各行を辞書またはタプルとして型キャストできます。これまで見てきたのは、各行をタプルとして表すデフォルトの動作です。dict に型キャストするには、コードを次のように変更します。

select = select([table1, table2]).where(all_filters)
res = conn.execute(select)
resultset = []
for row in res:
    resultset.append(dict(row))
print resultset

これは、一度に 1 行ずつ結果を処理する必要がある場合にうまく機能します。

すべての行を一度にリストに入れたい場合は、リスト内包表記の方が少しきれいです。

select = select([table1, table2]).where(all_filters)
res = conn.execute(select)
resultset = [dict(row) for row in res]
print resultset
于 2013-11-19T18:16:09.193 に答える