回答

收藏

cx_Oracle:如何迭代结果集?

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

有几种方法可以迭代结果集。两者的权衡是什么?1 C! S( s7 S# C( a/ x( \
                                                               
+ b! \5 F+ h  a2 [' T# `    解决方案:                                                                . x2 h9 X  M8 y
                                                                标准化的方法是使用内置的游标迭代器。2 o0 Z9 h, U3 C$ v3 F5 o- f) p
curs.execute('select * from people')for row in curs:    print row您可以使用fetchall()一次获得所有行。0 ^5 `1 u; b6 _6 n- \( `
for row in curs.fetchall():    print row使用此命令创建包含返回值的返回值Python列表可能非常方便:7 r8 ]. H. L" }$ h/ I
curs.execute('select first_name from people')names = [row[0] for row in curs.fetchall()]这可能对较小的结果集有用,但如果结果集很大,可能会产生不良副作用。. p1 g, }7 J$ h3 Y
您必须等待整个结果集返回客户流程。
" q; m& d+ J( k/ {3 c1 j8 Y( {7 G您可能会吞噬客户端中的大量内存来保存内置列表。
1 G4 a2 [+ L& V( {' aPython构建和解构你将立即丢弃的列表可能需要一些时间。7 `5 C, Z1 D& d* ^  x/ \/ c0 ]
如果知道结果集中返回一行,可以调用fetchone()获取银行。* R, Q: J7 n+ |0 i' Z& V2 B
curs.execute('select max(x) from t')maxValue = curs.fetchone()[0]最后,你可以通过结果集一次获得一行。通常,这样做没有什么特别的优势,而不是使用迭代器。
( F+ L3 R& q& F1 yrow = curs.fetchone()while row:    print row    row = curs.fetchone()
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则