回答

收藏

cx_Oracle:如何迭代结果集?

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

有几种方法可以迭代结果集。两者的权衡是什么?$ j5 ^8 S: Z3 j: |/ D6 p! P9 z) T
                                                               
% Y% w! R0 u1 M) X5 I! J% k    解决方案:                                                                - H) p6 }5 }3 K3 Y$ h: X7 k( s$ J" _- f
                                                                标准化的方法是使用内置的游标迭代器。6 l1 A5 M3 K% B" o+ S& B
curs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。
3 p$ m; p7 h5 L& A4 R3 Pfor row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:5 ?' N; ?/ b: i% w" [
curs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。1 O% A* S4 y5 J3 m
您必须等待整个结果集返回客户流程。: A& R# w2 D, u- p
您可能会吞噬客户端中的大量内存来保存内置列表。
; I( m# G9 s9 z0 A7 hPython构建和解构你将立即丢弃的列表可能需要一些时间。
  Q$ h( B% a- K  B  j
如果知道结果集中返回一行,可以调用fetchone()获取银行。
, K8 p+ p0 v1 T+ N; lcurs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。& z- f9 L3 X7 \3 c3 s7 Y
row = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则