回答

收藏

cx_Oracle:如何迭代结果集?

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

有几种方法可以迭代结果集。两者的权衡是什么?
- c1 Z& g' f* _                                                               
3 J& ~3 m( _: h' r# Z    解决方案:                                                               
: g- ]# Q5 m8 u                                                                标准化的方法是使用内置的游标迭代器。/ ?- s# {+ |0 L
curs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。
6 Z. p/ a3 Q  z& @  Afor row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:4 U: @  f# S' m; K0 m; d. y/ d
curs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。
9 j! b  U% N* C  D' O您必须等待整个结果集返回客户流程。; f3 Q; d/ P8 Z) Q" W$ l9 }
您可能会吞噬客户端中的大量内存来保存内置列表。" z" v" [1 u5 ~
Python构建和解构你将立即丢弃的列表可能需要一些时间。
6 w& b2 X$ U7 I/ k* C/ s( U
如果知道结果集中返回一行,可以调用fetchone()获取银行。' _; p5 L6 ^2 W' ?- U
curs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。
2 d: @  V9 u5 s! d* urow = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则