gpt4 book ai didi

python - 允许关闭数据库时关闭 cx_Oracle 连接

转载 作者:太空宇宙 更新时间:2023-11-03 15:27:08 26 4
gpt4 key购买 nike

以下 cx_Oracle 代码在数据库启动时工作正常:

#!C:\Python27
import cx_Oracle

try:
conn = cx_Oracle.connect("scott/tiger@oracle")

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

最佳答案

您可以尝试预先将 conn 初始化为类似 None 的内容,然后在 finally block 中对其进行测试。这是可行的,因为唯一将连接设置为其他内容的地方是在打开时。所以打开意味着非 NoneNone 意味着未打开:

#!C:\Python27
import cx_Oracle

conn = None
try:
conn = cx_Oracle.connect("scott/tiger@oracle")

try:
curs = conn.cursor()
curs.execute("SELECT dummy FROM sys.dual")
print curs.fetchone()[0]
finally:
curs.close()
finally:
if conn is not None:
conn.close()

关于python - 允许关闭数据库时关闭 cx_Oracle 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5248835/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com