select結果を辞書型に出力する際の順番の指定方法について質問させていただきたいです。
下記のコード状態で、実行するとselect取得結果がテーブルカラムの順番とは違った形で出力されてしまいます。
selectで取得した結果(カラムの順番のまま)を、ファイルに出力したのですがどうしたらいいでしょうか。
※7行目の"dict"で順番が変更されてしまっていると思います。
コメントアウトした箇所を変更しましたら、順番がselectのとおりとなりました。(ありがとうございます。)
が、ファイル出力には、カラム名が出力されない状態です。
Python
1conn = psycopg2.connect(hostとかの設定) 2cur = conn.cursor(cursor_factory=psycopg2.extras.NamedTupleCursor) 3#cur = conn.cursor(cursor_factory=psycopg2.extras.DictCursor) 4 5cur.execute("SELECT カラム1, カラム2, カラム3, カラム4 from test") 6#またはこっち 7#cur.execute("SELECT * from test") 8results = cur.fetchall() 9 10dict_result = [] 11for row in results: 12 dict_result.append(row._asdict()) 13 #dict_result.append(dict(row)) 14 15with open(filename, "w") as f: 16 json.dump(results, f, indent=4)
以下のようなテーブルがあったとして、実行すると順番がカラム1〜4と順番の通りに出力さず順番がシャッフルされます。
カラム1 | カラム2 | カラム3 | カラム4 |
---|---|---|---|
A | B | C | D |
を上記コードで実行すると、以下のような感じでバラバラにされてしまいます。(ファイル出力時)
{
"カラム2": "B",
"カラム1": "A",
"カラム4": "D",
"カラム3": "C"
}
printすると以下で表示されています。
[Record(column1='A ', column2='B ', column3='C ', column4='D ')]
これを、以下のようにテーブルのカラムの順番で表示させたいです。
{
”カラム1":"A",
”カラム2":"B",
”カラム3":"C",
"カラム4":"D"
}
検索をかけているのですがうまくいきません。以下、参考にしているURLです。
Pythonでリスト(配列)に要素を追加
Python psycopg2 で dict形式で結果を取得
Pythonで辞書を作成するdict()と波括弧、辞書内包表記
すみませんが、よろしくお願い致します。
〜備考〜
・言語:Python
・DB:postgresql
・Create文:
create table test (
column1 character(10)
,column2 character(10)
,column3 character(10)
,column4 character(10)
)
・insert文
insert INTO test (
column1,
column2,
column3,
column4
)
VALUES
( 'A',
'B',
'C',
'D'
)
回答3件
あなたの回答
tips
プレビュー