sql >> データベース >  >> RDS >> Oracle

cx_Oracle:各行を辞書として受け取るにはどうすればよいですか?

    カーソルのrowfactoryをオーバーライドできます 方法。クエリを実行するたびにこれを行う必要があります。

    これが標準クエリの結果であるタプルです。

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

    名前付きタプルを返す:

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

    辞書を返す:

    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}
    

    Amaury Forgeot d'Arcのクレジット:http://sourceforge.net/p/cx-oracle/mailman/message/27145597



    1. 複数のレコードを挿入してID値を取得するにはどうすればよいですか?

    2. 複数挿入SQLOracle

    3. SQLServerの重複キー更新に関するMySQLと同等

    4. Oracle:関数ベースのインデックス選択的一意性