我有两个问题:
问题 1:
假设我有两个 .py File-1 和 File-2
File-1 包含以下语句:
try:
cononnection = pypyodbc.connect('DRIVER={SQL Server};'
'SERVER=........'
'DATABASE=......'
'UID=......;PWD=......')
except:
print("I am unable to connect to the SQL SERVER Database")
在 File-2 中,如果我按以下方式使用 File-1 中定义的连接:
import AnotherPythonFile as File1
def query():
conxn1 = File1.cononnection
conxn2 = File1.cononnection
...
...
conxn1 和 conxn2 会使用在 File-1 中打开的相同连接,还是会打开另外两个新连接?
问题 2:
如果在执行以下语句时发生'pypyodbc.DatabaseError',那么连接会自动关闭(由于错误)吗?
cursr = connection.cursor()
cursr.execute(queryStr)
请您参考如下方法:
您必须将导入的模块包装在定义的函数中,并让函数返回连接对象:
# FILE 1
import pypyodbc
def dbconn():
try:
cononnection = pypyodbc.connect('DRIVER={SQL Server};'
'SERVER=........'
'DATABASE=......'
'UID=......;PWD=......')
return connection
except:
print("I am unable to connect to the SQL SERVER Database")
然后
import AnotherPythonFile as File1
def query():
# EACH WILL USE DIFFERENT INSTANCES OF SAME CONNECTION OBJECT
conxn1 = File1.dbconn()
conxn2 = File1.dbconn()
至于第二个问题,没有,当SQL查询执行失败时,游标和数据库连接都不会自动关闭。事实上,您可以测试这个断言。故意地,强制一个错误:
cursr.execute("SLEECT * FROM Table;")
然后,看到在引发回溯错误后,您仍然可以在 Python 的控制台中调用 cursr.close() 和 connection.close()。
