cx_Oracle:如何将每一行作为字典接收? [英] cx_Oracle: How can I receive each row as a dictionary?

查看:445
本文介绍了cx_Oracle:如何将每一行作为字典接收?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

默认情况下,cx_Oracle将每行作为一个元组返回.

By default, cx_Oracle returns each row as a tuple.

>>> import cx_Oracle
>>> conn=cx_Oracle.connect('scott/tiger')
>>> curs=conn.cursor()
>>> curs.execute("select * from foo");
>>> curs.fetchone()
(33, 'blue')

如何将每一行作为字典返回?

How can I return each row as a dictionary?

推荐答案

您可以覆盖游标的rowfactory方法.每次执行查询时,您都需要这样做.

You can override the cursor's rowfactory method. You will need to do this each time you perform the query.

这是标准查询的结果,一个元组.

Here's the results of the standard query, a tuple.

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

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

这篇关于cx_Oracle:如何将每一行作为字典接收?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆