Как запросить MySQL в словарь, используя Python? - PullRequest
0 голосов
/ 19 апреля 2020

Я пытаюсь извлечь результаты моего запроса в словарь в Python, но не совсем уверен, как это сделать.

Я установил Dictionary = true в конфигурации курсора, но это не работает должным образом.

import mysql.connector as mariadb
#  DB VARIABLES
mariadb_connection = mariadb.connect(user='user', password='pass', database='mydb')
cursor = mariadb_connection.cursor(dictionary=True)

cursor.execute("SELECT id, name FROM songs")
rows = cursor.fetchall()
print(rows)
if isinstance(rows, dict):
    print("this IS a dictionary")

Приведенный выше код ничего не печатает.

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

При использовании .fetchall() вы собираетесь получить несколько результатов, даже если запрос имеет один результат, это будет list of all results.


Использование dictionary=True даст список dict с именами полей, например

[{'id': '123456', 'name': 'This is the supe song 1'},
 {'id': '456789', 'name': 'This is the supe song 2'},
 {'id': '789123', 'name': 'This is the supe song 3'}]

без dictionary=True, вы просто получите список значений в виде кортежей

[('123456', 'This is the supe song 1'),
 ('456789', 'This is the supe song 2'),
 ('789123', 'This is the supe song 3')]

это True так

isinstance(rows, list) # True
isinstance(rows[0], dict) # True
0 голосов
/ 19 апреля 2020

Если вы хотите получить словарь, вам нужно решить, что будет служить словарным ключом. Предполагая, что это первое возвращаемое поле, ie id:

mariadb_connection = mariadb.connect(user='user', password='pass', database='mydb')
cursor = mariadb_connection.cursor()
cursor.execute("SELECT id, name FROM songs")
rows = cursor.fetchall()
dic = { t[0]: t[1:] for t in rows }

Конечно, для правильной работы значения в id должны быть уникальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...