在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连接对象,或连接上创建的光标。

无论什么使你的代码更易读,更容易维护的是什么我会去的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top