sql >> Database >  >> RDS >> Oracle

cx_Oracle:Hoe kan ik elke rij als een woordenboek ontvangen?

U kunt de rowfactory van de cursor overschrijven methode. U moet dit elke keer doen als u de query uitvoert.

Dit zijn de resultaten van de standaardquery, een tuple.

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

Een benoemde tuple retourneren:

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

Een woordenboek teruggeven:

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}

Met dank aan Amaury Forgeot d'Arc:http://sourceforge.net/p/cx-oracle/mailman/message/27145597



  1. Eenvoudige Oracle-query:letterlijk komt niet overeen met opmaaktekenreeks

  2. Oracle MINUS-operator uitgelegd

  3. Hex in tekstweergave converteren naar decimaal getal

  4. Hoe ClusterControl virtueel IP configureert en wat te verwachten tijdens failover