以下cx_Oracle
代码工作正常时,数据库已启动:关闭一个cx_Oracle连接,同时允许唐氏数据库
#!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()
但如果数据库恰好是下来的时候我运行此脚本,一个NameError
上升:
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
这对我来说很有意义:cx_Oracle
无法实例化一个连接,所以可变conn
从来没有得到设定,因此没有close()
方法。
在Python中,什么是确保数据库连接关闭的最佳方式,同时还能正常处理关闭数据库的情况?
做类似下面似乎是一个庞大的杂牌对我说:
finally:
try:
conn.close()
except NameError:
pass
在最后一个例子,curs.close()和conn.close()如果curs.execute()失败永远不会被调用。不过,我敢打赌,在退出期间一切都会被清理干净。必须检查Oracle中的活动连接以查看连接是否得到清理。 – Doug 2014-09-19 22:17:28