回答

收藏

cx_Oracle:如何迭代结果集?

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

有几种方法可以迭代结果集。两者的权衡是什么?
0 `! W  _+ K5 R; o/ y                                                                6 t) v- ?, w* d
    解决方案:                                                                ; Z( L; \  P! I% F
                                                                标准化的方法是使用内置的游标迭代器。
  G# C& c* D+ Y. T) I: Ccurs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。
8 @9 \" ^, ~. L( m% ~5 Z' gfor row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:
( Z" n; K# A' j% l" a# P: ?curs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。
8 P* ?4 }2 A$ s0 j  ?* _! U7 }您必须等待整个结果集返回客户流程。* y+ v$ v6 [: M- t. w' V8 r# N
您可能会吞噬客户端中的大量内存来保存内置列表。
. C5 q* ^: h) E4 \Python构建和解构你将立即丢弃的列表可能需要一些时间。
- ]0 K2 d8 B3 |4 K# ^/ B* k
如果知道结果集中返回一行,可以调用fetchone()获取银行。
% `- Y3 @8 @$ N  w% R: |curs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。
$ p5 ~/ J0 ~* R- e5 I) Urow = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则