回答

收藏

cx_Oracle:如何迭代结果集?

技术问答 技术问答 319 人阅读 | 0 人回复 | 2023-09-14

有几种方法可以迭代结果集。两者的权衡是什么?
( o- n0 w# B/ ]. T                                                               
( \  ~" J7 w6 h$ Q  F    解决方案:                                                               
8 L6 B" ^  t" L3 P+ Y9 ?8 e                                                                标准化的方法是使用内置的游标迭代器。1 z) y3 _$ i; V+ S4 @. ^
curs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。
, v; g" F. e& A- o7 s# Yfor row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:
4 G+ i3 j$ X' o7 T! Dcurs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。
7 p- y  Z9 U2 _& f您必须等待整个结果集返回客户流程。
) g: d  a4 ?1 w" \9 Q您可能会吞噬客户端中的大量内存来保存内置列表。
  Z7 S" g8 L" s" S/ bPython构建和解构你将立即丢弃的列表可能需要一些时间。
2 o$ ~( J& `. o% A2 p% A2 ]
如果知道结果集中返回一行,可以调用fetchone()获取银行。$ c& m! V2 }: T. u& T' X
curs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。
2 Z1 C% Z7 D) [% V  E, Prow = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则