web-dev-qa-db-fra.com

Python: utilisez mysqldb pour importer une table MySQL en tant que dictionnaire?

Quelqu'un sait comment utiliser mysqldb pour transformer une table MySQL, avec beaucoup de lignes, en une liste d'objets de dictionnaire en Python?

Je veux dire transformer un ensemble de lignes MySQL, avec les colonnes 'a', 'b' et 'c', en un objet Python ressemblant à ceci:

data = [ { 'a':'A', 'b':(2, 4), 'c':3.0 }, { 'a':'Q', 'b':(1, 4), 'c':5.0 }, { 'a':'T', 'b':(2, 8), 'c':6.1 } ]

Merci :)

31
AP257

MySQLdb a une classe de curseur distincte pour cela, le DictCursor. Vous pouvez transmettre la classe de curseur que vous souhaitez utiliser à MySQLdb.connect ():

import MySQLdb.cursors
MySQLdb.connect(Host='...', cursorclass=MySQLdb.cursors.DictCursor)
66
Thomas Wouters

Si vous devez utiliser plus de curseurs et qu'un seul d'entre eux doit être MySQLdb.cursors.DictCursor, vous pouvez effectuer les tâches suivantes:

import MySQLdb
db = MySQLdb.connect(Host='...', db='...', user='...t', passwd='...')

list_cursor = db.cursor()
dict_cursor = db.cursor(MySQLdb.cursors.DictCursor)
20
blueCat

Ceci est un article ancien et, bien que cette réponse ne corresponde pas exactement à ce que recherchait le PO, elle va dans le même sens. Au lieu de générer une liste de dictionnaires, il génère un dictionnaire de listes:

Aussi pensé que je fournirais le code complet pour générer le dictionnaire:

import MySQLdb
import MySQLdb.cursors

dict_serv = MySQLdb.connect(Host = 'localhost', user = 'root', passwd = 'mypassword', cursorclass = MySQLdb.cursors.DictCursor)

with dict_serv as c:
    c.execute("USE mydb")
    c.execute("SELECT col1, col2 FROM mytable WHERE id = 'X123'")

    # Save the dictionary to a separate variable
    init_dict = c.fetchall()

    # This line builds the column headers
    sql_cols = [ col[0] for col in c.description ]

    # This is a list comprehension within a dictionary comprehension
    # which builds the full dictionary in a single line.  
    sql_dict = { k : [ d[k] for d in init_dict ] for k in sql_cols }

Quels rendements:

{ 'col1': ['Apple','banana'], 'col2':['red','yellow'] }
0
elPastor