什么是重复使用的游标与创建一个新的光标的权衡?
题
在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连接对象,或连接上创建的光标。
无论什么使你的代码更易读,更容易维护的是什么我会去的。
不隶属于 StackOverflow