Mar*_*son 43
规范的方法是使用内置的游标迭代器.
curs.execute('select * from people')
for row in curs:
print row
Run Code Online (Sandbox Code Playgroud)
您可以使用fetchall()
一次获取所有行.
for row in curs.fetchall():
print row
Run Code Online (Sandbox Code Playgroud)
使用它可以很方便地创建一个包含返回值的Python列表:
curs.execute('select first_name from people')
names = [row[0] for row in curs.fetchall()]
Run Code Online (Sandbox Code Playgroud)
这对于较小的结果集很有用,但如果结果集很大,则会产生不良副作用.
您必须等待整个结果集返回到客户端进程.
您可能会在客户端占用大量内存来保存构建列表.
Python可能需要一段时间来构建和解构您将立即丢弃的列表.
如果您知道结果集中返回了一行,则可以调用fetchone()
以获取单行.
curs.execute('select max(x) from t')
maxValue = curs.fetchone()[0]
Run Code Online (Sandbox Code Playgroud)
最后,您可以遍历结果集,一次获取一行.通常,使用迭代器进行此操作没有特别的优势.
row = curs.fetchone()
while row:
print row
row = curs.fetchone()
Run Code Online (Sandbox Code Playgroud)
Aur*_*oni 24
我首选的方法是游标迭代器,但首先设置游标的arraysize属性.
curs.execute('select * from people')
curs.arraysize = 256
for row in curs:
print row
Run Code Online (Sandbox Code Playgroud)
在此示例中,cx_Oracle将一次从Oracle 256行中获取行,从而减少需要执行的网络往返次数
psyco-pg
似乎还有这样的方式......从我收集的内容来看,它似乎创建了类似字典的行代理,以便将键查找映射到查询返回的内存块中.在这种情况下,获取整个答案并在行上使用类似的代理工厂似乎是有用的想法.想想看,它感觉更像是Lua而不是Python.
此外,这应该适用于所有PEP-249 DBAPI2.0接口,而不仅仅是Oracle,或者您的意思是使用Oracle 最快?