отсоединить SQL базу данных после того, как класс выпадает из области видимости - PullRequest
0 голосов
/ 11 января 2020

Я использую pyodb c и transact- sql для подключения и отключения SQL баз данных от сервера (SQL Express) для пользовательского приложения. Приложение имеет пользовательский интерфейс, созданный с помощью Qt, а базовые команды SQL реализованы с помощью класса python. Структура моего проекта выглядит следующим образом:

# sql.py...
class SQLHandling:
    def attach_database(...):
        # SQL with pyodbc
        with cursor_object:
            cursor_object.execute(sql_attach)
    def detach_database(...):
        # Transact-sql is here
        subprocess.call([sql_disconnect_code])
    def execute_sql(...):
        with cursor_object:
            cursor_object.execute(sql_str)

# userinterface.py...
class UserInterface(QDialog):
    # Do stuff with user interface....
    MySQLHandler = SQLHandling(...)
    MySQLHandler.attach_database(...)
    # Do stuff
    MySQLHandler.detach_database(...)

Я не хочу, чтобы присоединенные базы данных оставались подключенными к серверу после закрытия пользовательского интерфейса или в случае возникновения ошибки.

Есть ли способ гарантировать отключение базы данных от сервера SQL при условии?

Вот некоторые из моих вариантов:

  1. Я могу повторно реализовать метод close пользовательского интерфейса и отсоединить базу данных до закрытия приложения. Минусы: сработает ли это, если приложение аварийно завершает работу или закрывается через системный процесс (диспетчер задач)?

  2. Есть ли способ отсоединить базу данных до того, как класс SQLHandling выйдет из области видимости? Минусы: Должен ли я работать со сборкой мусора? Звучит жестко ..

  3. Имеет ли сервер SQL утилиту, которая отключает базу данных при разрыве соединений с ней? В настоящее время pyodb c закрывает соединения, когда они go находятся вне области видимости, но я мог бы заставить объект соединения оставаться в области видимости, сделав его атрибутом класса.

...