Skip to main content
 首页 » 编程设计

python之pypyodbc之重用数据库连接

2025年05月04日11bonelee

我有两个问题:

问题 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()。