Le code cx_Oracle
suivant fonctionne très bien lorsque la base de données est:Fermeture d'une connexion cx_Oracle tout en permettant une base de données vers le bas
#!C:\Python27
import cx_Oracle
try:
conn = cx_Oracle.connect("scott/[email protected]")
try:
curs = conn.cursor()
curs.execute("SELECT dummy FROM sys.dual")
print curs.fetchone()[0]
finally:
curs.close()
finally:
conn.close()
Mais si la base de données se trouve être vers le bas quand je lance ce script, un NameError
est élevé :
Traceback (most recent call last):
File "C:\Users\ArtMetzer\Documents\Code\Python\db_conn_test.py", line 14, in <module>
conn.close()
NameError: name 'conn' is not defined
Cela me paraît logique: cx_Oracle
n'a pas pu instancier une connexion, de sorte que la conn
variables ne se est fixé, et n'a donc pas de méthode close()
.
En Python, quelle est la meilleure façon de vous assurer que votre connexion à la base de données se ferme, tout en gérant avec élégance l'état d'une base de données?
Faire quelque chose comme ce qui suit semble être une bidouille massive pour moi:
finally:
try:
conn.close()
except NameError:
pass
Dans le dernier exemple, curs.close() et conn.close() ne serait jamais appelé si curs.execute() a échoué. Cependant, je parie que tout serait nettoyé pendant la sortie. Il faudrait vérifier les connexions actives dans Oracle pour voir si la connexion a été nettoyée. – Doug