在 cx_Oracle(或一般的 Oracle)中,是否可以为每个查询分配一个游标,或者在多个查询中重用一个游标。
def getSomeData(curs): # case 1: pass in a cursor, which is generally
curs.execute('select ...') # reused across queries
return curs.fetchall()
def getSomeData(conn): # case 2: pass in a connection,allocate
curs=conn.cursor() # a cursor for this query
curs.execute('select ...')
return curs.fetchall()
当然,这两种方法都返回相同的数据。
这两种方法之间的权衡是什么?一个效率特别高还是低?在许多查询上重复使用游标是否存在任何潜在的陷阱?
最佳答案
您可以随心所欲地重复使用 cx_Oracle 游标,没问题。如果您在短时间内执行数千个小查询,您可能通过重新使用游标看到轻微的性能提升,但我对此表示怀疑。
我有时会创建新游标,有时会重新使用现有游标,具体取决于它是否使代码更易于阅读和理解。
例如,如果我有各种需要访问数据库的过程,我可能会传递一个 Oracle 连接对象,或在该连接上创建的游标。
只要能让您的代码更具可读性和更易于维护,这就是我所追求的。
关于python - 重用游标与创建新游标的权衡是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2035212/