sql >> Database teknologi >  >> RDS >> Oracle

cx_Oracle:Hvordan kan jeg modtage hver række som en ordbog?

Du kan tilsidesætte markørens rowfactory metode. Du bliver nødt til at gøre dette, hver gang du udfører forespørgslen.

Her er resultaterne af standardforespørgslen, en tuple.

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

Returnerer en navngivet tuple:

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

Returnerer en ordbog:

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}

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



  1. datetime2 vs datetimeoffset i SQL Server:Hvad er forskellen?

  2. Brug psql's \copy til en forespørgsel med flere linjer

  3. Hvad er nyt i PostgreSQL 13?

  4. Hvordan genererer man DDL programmatisk fra Oracle-databasen?