sql >> Base de Datos >  >> RDS >> Oracle

cx_Oracle:¿Cómo puedo recibir cada fila como un diccionario?

Puede anular la rowfactory del cursor método. Deberá hacer esto cada vez que realice la consulta.

Estos son los resultados de la consulta estándar, una tupla.

curs.execute('select * from foo')
curs.fetchone()
    (33, 'blue')

Devolviendo una tupla con nombre:

def makeNamedTupleFactory(cursor):
    columnNames = [d[0].lower() for d in cursor.description]
    import collections
    Row = collections.namedtuple('Row', columnNames)
    return Row

curs.rowfactory = makeNamedTupleFactory(curs)
curs.fetchone()
    Row(x=33, y='blue')

Devolviendo un diccionario:

def makeDictFactory(cursor):
    columnNames = [d[0] for d in cursor.description]
    def createRow(*args):
        return dict(zip(columnNames, args))
    return createRow

curs.rowfactory = makeDictFactory(curs)
curs.fetchone()
    {'Y': 'brown', 'X': 1}

Crédito a Amaury Forgeot d'Arc:http://sourceforge.net/p/cx-oracle/mailman/message/27145597