LoginSignup
kimetu
@kimetu (sho)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

mysqlからのデータ取り出し

解決したいこと

ここに解決したい内容を記載してください。

例)
mysqlからpythonを使用しデータ取り出しを行っています。
fetchallでデータを取り出すと添付画像のように辞書型で取り出されてしまいます。
一般的なリスト型で取り出す方法をご教授頂きたいです。

mysqlへはphpadminを使用し自分で作成したエクセルのファイルをインポート
いたしました。
何卒よろしくお願いします。

キャプチャ.PNG

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

該当するソースコード

``python
ソースコードを入力

conn = pymysql.connect(host='localhost',
                             user='root',
                             password='',
                             db='test',
                             charset='utf8mb4',
                             cursorclass=pymysql.cursors.DictCursor)
cur = conn.cursor()
sql = "Select * from cooking_dataset"
cur.execute(sql)
rows = cur.fetchall()
for i in rows:
    print(i)
###

0

2Answer

pymysql.cursors.DictCursor は,名前に Dict と入っている通り,レコードを辞書型で取得したいときに使うものです.これを使わなければ,結果が辞書ではなくタプルになります.

  conn = pymysql.connect(host='localhost',
                               user='root',
                               password='',
                               db='test',
+                              charset='utf8mb4')
-                              charset='utf8mb4',
-                              cursorclass=pymysql.cursors.DictCursor)

どうしてもタプルではなくリストになってほしいならば,一旦タプルとして取得してから変換します.

cur.execute(sql)
rows = [list(r) for r in cur]
2

Comments

  1. @kimetu

    Questioner
    DictCursorとタプルから変換する際の
    記述方法とても勉強になりました!

    本当にありがとうございます。

辞書型を変形すればよいのではないでしょうか?

rows = cur.fetchall()

data = [[value for value in row.values()] for row in rows ]

print(data)
"""
data = [
    ...
    ["112", "ピロシキ"],
    ["113", "焼きそばパン"]
    ...
]
"""

内包表記でやるとほんの少し速いですよ。

1

Comments

  1. @kimetu

    Questioner
    ありがとうございます!!
    辞書型から変換することでうまくいきました!
    すごく悩んでいたので助かりました。

Your answer might help someone💌