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 :)
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)
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)
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'] }