Quais são as vantagens e desvantagens de reutilização de um cursor vs. criação de um novo cursor?

StackOverflow https://stackoverflow.com/questions/2035212

Pergunta

Em cx_Oracle (ou Oracle em geral), é possível atribuir um cursor para cada consulta ou reutilizar um cursor em várias consultas.

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

É claro que ambas as abordagens retornar os mesmos dados.

Quais são as vantagens e desvantagens entre as duas abordagens? É um particular mais ou menos eficiente? Há algum armadilhas potenciais para reutilizar um cursor sobre muitas consultas?

Foi útil?

Solução

Você pode re-utilizar um cursor cx_Oracle tanto quanto você gosta, não há problema. Se você está executando milhares de pequenas consultas em um pequeno espaço de tempo, você pode ver uma melhoria de desempenho ligeiro por re-utilizando o cursor, mas eu duvido.

Eu, às vezes, criar novos cursores, e outras vezes re-utilizar um já existente, dependendo se torna o código mais fácil de ler e entender.

Por exemplo, se eu tiver uma variedade de procedimentos que precisam acessar o banco de dados, eu poderia passar um objeto de conexão do Oracle ao redor, ou um cursor criado nessa conexão.

O que faz seu código mais legível e mais fácil de manter é o que eu iria para.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top