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


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

Je veux dire tourner un ensemble de lignes MySQL, avec les colonnes 'a', 'b' et 'c', dans un objet Python qui ressemble à 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
2018-02-01 21:31


origine


Réponses:


MySQLdb a une classe de curseur séparée pour cela, le DictCursor. Vous pouvez passer la classe de curseur que vous souhaitez utiliser à MySQLdb.connect ():

import MySQLdb.cursors
MySQLdb.connect(host='...', cursorclass=MySQLdb.cursors.DictCursor)

63
2018-02-01 21:37



Si vous avez besoin d'utiliser plus de curseurs et qu'un seul doit être MySQLdb.cursors.DictCursor vous pouvez faire:

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

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

18
2018-05-10 09:16



Il s’agit d’un article ancien, et bien que cette réponse ne corresponde pas exactement à ce que recherchait le programme opérationnel, il se situe 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 }

Qui donne:

{ 'col1': ['apple','banana'], 'col2':['red','yellow'] }

0
2017-11-02 22:15