cx_Oracle:如何将每一行作为字典接收? [英] cx_Oracle: How can I receive each row as a dictionary?
本文介绍了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屋!
查看全文