Oracle
 sql >> Datenbank >  >> RDS >> Oracle

cx_Oracle:Wie kann ich jede Zeile als Wörterbuch erhalten?

Sie können die rowfactory des Cursors überschreiben Methode. Sie müssen dies jedes Mal tun, wenn Sie die Abfrage ausführen.

Hier sind die Ergebnisse der Standardabfrage, ein Tupel.

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

Rückgabe eines benannten Tupels:

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

Wörterbuch zurückgeben:

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}

Dank an Amaury Forgeot d'Arc:http://sourceforge.net/p/cx-oracle/mailman/message/27145597