2010-02-01 18 views
26

¿Alguien sabe cómo puedo usar mysqldb para convertir una tabla MySQL, con muchas filas, en una lista de objetos de diccionario en Python?Python: use mysqldb para importar una tabla MySQL como un diccionario?

me refiero a que dan vuelta a un conjunto de filas de MySQL, con columnas 'a', 'b' y 'c', en un objeto de Python que que tiene este aspecto:

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 } ] 

Gracias :)

+0

I agregaría etiquetas 'dictionary' y/o' cursor' aquí, si pudiera. – cregox

Respuesta

56

MySQLdb tiene una clase de cursor separada para esto, el DictCursor. Puede pasar la clase del cursor que desea utilizar para MySQLdb.connect():

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

Perfecto, gracias! Para cualquier otra persona que lea, también debe agregar "importar MySQLdb.cursors" al principio de su secuencia de comandos de Python para incluirlo. – AP257

+2

Debe haberse perdido el hecho de que realmente incluí la importación MySQL.cursors allí mismo en el fragmento de código. –

+15

Para cualquier otra persona que lea, también necesita agregar 'MySQLdb.connect (host = '...', cursorclass = MySQLdb.cursors.DictCursor)' en algún lugar después de 'import MySQLdb.cursors' para que el fragmento funcione. (¡Lo siento, no pude resistir!: D) – cregox

16

Si necesita usar más cursores y sólo hay que ser MySQLdb.cursors.DictCursor que puede hacer:

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

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

Necesito agregar 'import MySQLdb.cursors' de lo contrario, generar un error en python 3.4 –

0

Esta es una publicación antigua, y aunque esta respuesta no es exactamente lo que el OP estaba buscando, está muy en la misma línea. En lugar de generar una lista de diccionarios, se genera un diccionario de listas:

También pensé en proporcionar el código completo para generar el diccionario:

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 } 

que produce:

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