回答

收藏

cx_Oracle:如何迭代结果集?

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

有几种方法可以迭代结果集。两者的权衡是什么?, t; C( w. A( q  J* P3 t! H
                                                               
- D* |; f7 p8 E9 L% n2 ^4 v- ?) g    解决方案:                                                               
3 A" b% \+ l& G8 R- g' N                                                                标准化的方法是使用内置的游标迭代器。) x$ A/ s6 m9 b5 R" L/ @
curs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。
  y6 h4 L7 }8 N9 `9 X" Rfor row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:  M- u, J$ Q/ N' E/ q" E
curs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。
2 e0 _& z& B% o您必须等待整个结果集返回客户流程。! F& ]" A% T8 @# P, d+ m
您可能会吞噬客户端中的大量内存来保存内置列表。
6 B2 Y% Y+ S( `5 K- N5 @Python构建和解构你将立即丢弃的列表可能需要一些时间。% `1 X3 z+ G" h' [) _6 Y/ o+ q
如果知道结果集中返回一行,可以调用fetchone()获取银行。
0 `4 T+ |& o) a5 _curs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。
1 t1 [, X1 q' t! }0 Hrow = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则