Problem z obiektami

0

Witam
Piszę program który ma mi ułatwić życie w pracy. Wszytko dobrze jak na razie szło dopóki nie zacząłem ogarniać połączenia z bazą danych. Program ma defa kto synchronizować dwie bazy danych. Połączenie z bazą danych stworzyłem jako obiekt. Problem tkwi w tym że tego obiektu nie potrafię w sensowny sposób przekazać. Wykonuję to w ten sposób.
main.py:

.......
DB_output = 'NULL'
class Synchronizator(QWidget):
.........
    def exitApp(self):
        lgr.info('Exit application')
        if config[0] == 'MSSQL':
            print(DB_output)
            DB_output.MSSQL_close()

            #TODO: Poprawić rozłącznie bazy danych.
        self.close()

    def pushbottom_connect(self):
        if len(self.lineEdit_Login.text()) >0 and len(self.lineEdit_Password.text()) >0 and len(self.lineEdit_DatabaseName.text()) >0 and len(self.lineEdit_Hostname.text()) >0:
            if self.combo_SQL_name.currentText() == 'MSSQL':
                DB_output = MSSQL.DB_MSSQL()
                DB_output.connect(self.lineEdit_Login.text(), self.lineEdit_Password.text(), self.lineEdit_Hostname.text(), self.lineEdit_DatabaseName.text(), self.spinbox_port.text())
                config[0]= 'MSSQL'
                lgr.info('connect database MSSQL')
                print(DB_output.table_check())
                #self.treeDatabase(MSSQL_DB.table_check())

MSSQL.py

class DB_MSSQL():
    def connect(self, login = 'NULL', password = 'NULL', host = 'NULL', database = 'NULL', port = 1433):
        engine = create_engine('mssql+pyodbc://%s:%s@%s:%s/%s?driver=SQL+Server+Native+Client+11.0' %(login, password, host, port, database))
        self.db = engine.connect()
        lgr.info('MSSQL init connection')

    def table_check(self):
        tab=[]
        query = self.db.execute('SELECT* FROM INFORMATION_SCHEMA.TABLES;')
        for a in query:
            tab.append(a[2])
        tab.sort()
        return tab

    def MSSQL_close(self):
        self.db.close()
        print('połączenie zamknięte')

I teraz tak samo połączenie działa prawidłowo. Połączyłem się uzyskałem listę tabel z bazy danych lecz podczas wyłączania aplikacji i zamykania połączenia z bazą danych dostaję błąd:

DB_output.MSSQL_close()
AttributeError: 'str' object has no attribute 'MSSQL_close'

A jak po połączeniu z bazą danych wypisuję w tej samej funkcji DB_output dostaję referencję do obiektu natomiast jak już po połączeniu z bazą danych wypiszę DB_output z fikcji exitApp dostaję wynik NULL. Dlaczego ta zmienna się nie nadpisuje ?
Czy poprawnie wykonuję obsługę połączenia z bazą danych czy powinienem inaczej to wykonać ?

0

A czemu nie zapiszesz tego DB_output jako pole klasy?

class Synchronizator(QWidget):
.........
    def exitApp(self):
        lgr.info('Exit application')
        if config[0] == 'MSSQL':
            print(self.DB_output)
            self.DB_output.MSSQL_close()

            #TODO: Poprawić rozłącznie bazy danych.
        self.close()

    def pushbottom_connect(self):
        if len(self.lineEdit_Login.text()) >0 and len(self.lineEdit_Password.text()) >0 and len(self.lineEdit_DatabaseName.text()) >0 and len(self.lineEdit_Hostname.text()) >0:
            if self.combo_SQL_name.currentText() == 'MSSQL':
                self.DB_output = MSSQL.DB_MSSQL()
                self.DB_output.connect(self.lineEdit_Login.text(), self.lineEdit_Password.text(), self.lineEdit_Hostname.text(), self.lineEdit_DatabaseName.text(), self.spinbox_port.text())
                config[0]= 'MSSQL'
                lgr.info('connect database MSSQL')
                print(self.DB_output.table_check())
                #self.treeDatabase(MSSQL_DB.table_check())

1 użytkowników online, w tym zalogowanych: 0, gości: 1