1

Python を使用しpyodbcて SQL Server 2008 にアクセスしようとしています。最初の接続は機能します。次に、プログラムがジョブを終了した後、接続を閉じます。プログラムがデータベースにアクセスして再度接続しようとすると、次のステートメントで失敗します。

self.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8")

でも初めてでもOK。それで、誰かが理由を知っていますか?以下は 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

プログラムが を 2 回目に呼び出すms.GetConnect()と、ステートメントself.conn = pyodbc.connect(DRIVER=self.DRIVER, SERVER=self.SERVER, DATABASE=self.DATABASE, UID=self.UID, PWD=self.PWD, charset="UTF-8")は失敗します。

4

0 に答える 0