2

我有两个问题:

问题一:

假设我有两个 .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)
4

1 回答 1

-1

您必须将导入的模块包装在定义的函数中,并让函数返回连接对象:

# 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()

于 2015-12-16T02:31:16.977 回答