在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()
当然,这两种方法都会返回相同的数据。
这两种方法之间的权衡是什么?特别是效率更高还是更低?在许多查询中重用游标是否有任何潜在的缺陷?
答案 0 :(得分:10)
您可以根据需要重复使用cx_Oracle游标,没问题。如果您在很短的时间内执行了数千个小查询,那么可能通过重新使用光标看到性能略有改善,但我对此表示怀疑。
我有时会创建新游标,有时会重新使用现有游标,具体取决于它是否使代码更易于阅读和理解。
例如,如果我有各种需要访问数据库的过程,我可能会传递Oracle连接对象,或者在该连接上创建游标。
无论是什么让你的代码更易读,更容易维护,我都会选择。