Python pyodbc连接到数据库两次失败
我正在尝试使用Python和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") 但是第一次是可以的。有人知道为什么吗?下面
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的更新。我注意到类似的行为,但在第二次调用执行时。