14

在 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()

当然,两种方法都返回相同的数据。

两种方法之间的权衡是什么?一种效率更高还是更低?在许多查询中重用游标是否有任何潜在的陷阱?

4

1 回答 1

10

您可以随意重复使用 cx_Oracle 游标,没问题。如果您在很短的时间内执行数千个小查询,您可能会通过重新使用游标看到性能略有提高,但我对此表示怀疑。

我有时会创建新的游标,有时会重新使用现有的游标,这取决于它是否使代码更易于阅读和理解。

例如,如果我有各种需要访问数据库的过程,我可能会传递一个 Oracle 连接对象,或者在该连接上创建一个游标。

无论使您的代码更具可读性和更易于维护,这都是我所追求的。

于 2010-01-10T13:33:01.573 回答