重用光标与创建新光标的权衡是什么?

时间:2010-01-09 22:26:47

标签: python sql database oracle cx-oracle

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

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

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

1 个答案:

答案 0 :(得分:10)

您可以根据需要重复使用cx_Oracle游标,没问题。如果您在很短的时间内执行了数千个小查询,那么可能通过重新使用光标看到性能略有改善,但我对此表示怀疑。

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

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

无论是什么让你的代码更易读,更容易维护,我都会选择。