Quels sont les compromis de la réutilisation d'un curseur par rapport à la création d'un nouveau curseur?

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

Question

Dans cx_Oracle (ou Oracle en général), il est possible d'attribuer un curseur pour chaque requête, ou de réutiliser un curseur sur plusieurs requêtes.

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

Bien sûr, les deux approches renvoient les mêmes données.

Quels sont les compromis entre les deux approches? Est-ce un particulier plus ou moins efficace? Y a-t-il des pièges potentiels à la réutilisation d'un curseur sur de nombreuses requêtes?

Était-ce utile?

La solution

Vous pouvez réutiliser un curseur de cx_Oracle autant que vous le souhaitez, pas de problème. Si vous exécutiez des milliers de petites requêtes dans un petit espace de temps, vous peut voir une légère amélioration de la performance en réutilisant le curseur, mais je doute.

Je vais parfois créer de nouveaux curseurs, et d'autres fois réutiliser un existant, selon qu'il rend le code plus facile à lire et à comprendre.

Par exemple, si j'ai une variété de procédures qui ont besoin d'accéder à la base de données, je pourrais passer un objet de connexion Oracle autour ou un curseur créé sur cette connexion.

Quelle que soit rend votre code plus lisible et plus facile à maintenir est ce que je vais pour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top