Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyodbc连接到数据库两次失败_Python_Sql Server_Connection_Pyodbc - Fatal编程技术网

Python pyodbc连接到数据库两次失败

Python pyodbc连接到数据库两次失败,python,sql-server,connection,pyodbc,Python,Sql Server,Connection,Pyodbc,我正在尝试使用Python和pyodbc访问SQLServer2008。第一个连接起作用。然后,程序完成其工作后,关闭连接。当程序尝试访问数据库并再次连接到它时,它在以下语句中失败: self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8") 但是第一次是可以的。有人知道为什么吗?下面

我正在尝试使用Python和
pyodbc
访问SQLServer2008。第一个连接起作用。然后,程序完成其工作后,关闭连接。当程序尝试访问数据库并再次连接到它时,它在以下语句中失败:

self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8")
但是第一次是可以的。有人知道为什么吗?下面是Python代码:

class ODBC_MS:  

    def __init__(self, DRIVER,SERVER, DATABASE, UID, PWD):
        ''' initialization '''

        self.DRIVER = DRIVER
        self.SERVER = SERVER
        self.DATABASE = DATABASE
        self.UID = UID
        self.PWD = PWD


    def _GetConnect(self):
        ''' Connect to the DB '''
        if not self.DATABASE:
            raise(NameError,"no getting db name")
        try:
            self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER,
                                       DATABASE=self.DATABASE, UID=self.UID,
                                       PWD=self.PWD, charset="UTF-8")
        except Exception,e:
            print e.message
        else:
            self.cur = self.conn.cursor()
            if not self.cur:
                raise(NameError,"connected failed!")
            else:
                return self.cur, self.conn

    def ExecNoQuery(self,conn, cursor, sql):
        cursor.execute(sql)
        ret = conn.commit()
        return ret

    def _UnConnect(self,conn, cursor):
        conn.close()


    if __name__ == '__main__':

    ms = ODBC_MS('{SQL SERVER}', r'<server>', '<db>', '<user>',  '<password>') 
    cursor, conn = ms._GetConnect() #connection

    sql = "create table XX for example"

    ret = ms.ExecNoQuery(conn, cursor,sql) #sql operation


    ms._UnConnect(conn, cursor) #close db


    #access the database the second time.
    ms = ODBC_MS('{SQL SERVER}', r'<server>', '<db>', '<user>',  '<password>') 
    cursor, conn = ms._GetConnect() # not success, I don't know why

    sql = "create table XX for example"
    ret = ms.ExecNoQuery(conn, cursor,sql) #sql operation

    ms._UnConnect(conn, cursor) #close db
classodbc\u MS:
定义初始化(自身、驱动程序、服务器、数据库、UID、PWD):
''初始化''
self.DRIVER=DRIVER
self.SERVER=SERVER
self.DATABASE=数据库
self.UID=UID
self.PWD=PWD
def_GetConnect(自连接):
''连接到数据库''
如果不是self.DATABASE:
raise(名称错误,“无法获取数据库名称”)
尝试:
self.conn=pyodbc.connect(DRIVER=self.DRIVER,SERVER=self.SERVER,
DATABASE=self.DATABASE,UID=self.UID,
PWD=self.PWD,charset=“UTF-8”)
除例外情况外,e:
打印电子邮件
其他:
self.cur=self.conn.cursor()
如果不是self.cur:
raise(名称错误,“连接失败!”)
其他:
返回self.cur,self.conn
def ExecNoQuery(self、conn、游标、sql):
cursor.execute(sql)
ret=conn.commit()
回程网
def_断开连接(自身、连接、光标):
康涅狄格州关闭
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
ms=ODBC_-ms({SQL SERVER}',r'','','')
光标,conn=ms._GetConnect()#连接
sql=“例如,创建表XX”
ret=ms.ExecNoQuery(conn,cursor,sql)#sql操作
ms._断开连接(连接,光标)#关闭数据库
#第二次访问数据库。
ms=ODBC_-ms({SQL SERVER}',r'','','')
光标,conn=ms._GetConnect()#不成功,我不知道为什么
sql=“例如,创建表XX”
ret=ms.ExecNoQuery(conn,cursor,sql)#sql操作
ms._断开连接(连接,光标)#关闭数据库

第二次,当程序调用
ms.GetConnect()
时,语句
self.conn=pyodbc.connect(DRIVER=self.DRIVER,SERVER=self.SERVER,DATABASE=self.DATABASE,UID=self.UID,PWD=self.PWD,charset=“UTF-8”)
失败。

添加pyodbc导入并修复类方法的标识后,代码在这里工作正常。请用收到的异常的完整堆栈跟踪更新您的问题。如果您解决了问题,我希望听到您@Leo的更新。我注意到类似的行为,但在第二次调用执行时。