擅长:python、mysql、java
<p>您可以重写游标的<code>rowfactory</code>方法。每次执行查询时都需要这样做。</p>
<p>这是标准查询的结果,一个元组。</p>
<pre><code>curs.execute('select * from foo')
curs.fetchone()
(33, 'blue')
</code></pre>
<p>返回命名元组:</p>
<pre><code>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')
</code></pre>
<p>返回词典:</p>
<pre><code>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}
</code></pre>
<p>阿默里·福盖特·德·阿尔克的功劳:
<a href="http://sourceforge.net/p/cx-oracle/mailman/message/27145597" rel="noreferrer">http://sourceforge.net/p/cx-oracle/mailman/message/27145597</a></p>