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()