with tutorial instalar has espaƱol descargar attribute python mysql sqlite dictionary dataformat

tutorial - Python-mysqlDB, resultado de sqlite como diccionario



sqlite3 python install (5)

Al hacer esto en mysqlDB, simplemente agregue lo siguiente a la función de llamada de conexión

cursorclass = MySQLdb.cursors.DictCursor

Cuando hago algo como

sqlite.cursor.execute("SELECT * FROM foo") result = sqlite.cursor.fetchone()

Creo que debo recordar el orden en el que las columnas parecen poder recuperarlas, por ejemplo,

result[0] is id result[1] is first_name

¿Hay alguna manera de devolver un diccionario? ¿Entonces puedo usar el resultado [''id''] o similar?

El problema con las columnas numeradas es que si escribe su código y luego inserta una columna, es posible que tenga que cambiar el código; por ejemplo, el resultado [1] para first_name podría ser una fecha_conocida, así que tendría que actualizar todo el código ...


David Beazley tiene un buen ejemplo de esto en su Referencia esencial de Python .
No tengo el libro a la mano, pero creo que su ejemplo es algo así:

def dict_gen(curs): '''''' From Python Essential Reference by David Beazley '''''' import itertools field_names = [d[0].lower() for d in curs.description] while True: rows = curs.fetchmany() if not rows: return for row in rows: yield dict(itertools.izip(field_names, row))

Uso de la muestra:

>>> import sqlite3 >>> conn = sqlite3.connect('':memory:'') >>> c = conn.cursor() >>> c.execute(''create table test (col1,col2)'') <sqlite3.Cursor object at 0x011A96A0> >>> c.execute("insert into test values (1,''foo'')") <sqlite3.Cursor object at 0x011A96A0> >>> c.execute("insert into test values (2,''bar'')") <sqlite3.Cursor object at 0x011A96A0> # `dict_gen` function code here >>> [r for r in dict_gen(c.execute(''select * from test''))] [{''col2'': u''foo'', ''col1'': 1}, {''col2'': u''bar'', ''col1'': 2}]


Puedes hacer esto muy fácilmente. Para SQLite: my_connection.row_factory = sqlite3.Row

Compruébelo en los documentos de Python: http://docs.python.org/library/sqlite3.html#accessing-columns-by-name-instead-of-by-index

ACTUALIZAR:

Python 2.6.1 (r261:67515, Feb 11 2010, 00:51:29) [GCC 4.2.1 (Apple Inc. build 5646)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> conn = sqlite3.connect('':memory:'') >>> conn.row_factory = sqlite3.Row >>> c = conn.cursor() >>> c.execute(''create table test (col1,col2)'') <sqlite3.Cursor object at 0x1004bb298> >>> c.execute("insert into test values (1,''foo'')") <sqlite3.Cursor object at 0x1004bb298> >>> c.execute("insert into test values (2,''bar'')") <sqlite3.Cursor object at 0x1004bb298> >>> for i in c.execute(''select * from test''): print i[''col1''], i[''col2''] ... 1 foo 2 bar


una instancia de sqlite3.Row se puede convertir a dict - muy útil para volcar un resultado como json

>>> csr = conn.cursor() >>> csr.row_factory = sqlite3.Row >>> csr.execute(''select col1, col2 from test'') >>> json.dumps(dict(result=[dict(r) for r in csr.fetchall()]))


import MySQLdb dbConn = MySQLdb.connect(host=''xyz'', user=''xyz'', passwd=''xyz'', db=''xyz'') dictCursor = dbConn.cursor(MySQLdb.cursors.DictCursor) dictCursor.execute("SELECT a,b,c FROM table_xyz") resultSet = dictCursor.fetchall() for row in resultSet: print row[''a''] dictCursor.close dbConn.close()