PyQt - Как закрыть соединение с базой данных при уничтожении класса - PullRequest
1 голос
/ 16 января 2012

Если мой класс использует базу данных довольно много раз (многие функции / свойства используют данные из БД), что является лучшим методом: создать соединение с БД один раз в начале класса, делать сколько угодно раз и затем закройте соединение с БД при выходе (используя глобальные переменные); или для создания / использования / закрытия соединений с БД в каждом свойстве (с использованием локальных переменных)?

Если лучше установить соединение один раз и закрыть его при уничтожении класса, как я могу это сделать?

def __del__ (self)
    self.connection.close()

не работает.

Спасибо.

Ответы [ 3 ]

3 голосов
/ 16 января 2012

__del__ функция вызывается только тогда, когда объект разрушен, то есть когда ни один объект больше не ссылается на него, когда происходит сбор мусора.

Либо посмотрите, какой объект все еще ссылается на ваш класс, когда вы отпускаете егоили реализуйте явный метод завершения работы в вашем классе.

Опасно полагаться на метод __del__ для освобождения ресурсов, поскольку объект не разрушается, когда мы думаем, что это так.

Отдокументация python

Некоторые объекты содержат ссылки на «внешние» ресурсы, такие как открытые файлы или окна.Понятно, что эти ресурсы освобождаются, когда объект собирается сборщиком мусора, но поскольку сборка мусора не гарантируется, такие объекты также предоставляют явный способ освобождения внешнего ресурса, обычно это метод close ().Программам настоятельно рекомендуется явно закрывать такие объекты.Оператор try ... finally предоставляет удобный способ сделать это.

0 голосов
/ 16 января 2012

Создайте функцию запроса на закрытие базы данных, к которой может обращаться класс основного окна.

Затем вы можете вызвать ее в пределах окна closeEvent и, возможно, предпринять различные действия в зависимости отна возвращаемое значение функции.

0 голосов
/ 16 января 2012

Если другие классы также будут использовать соединения с базой данных, вы можете создать класс, который будет включать методы для создания БД, подключения / закрытия БД и получения информации из БД и т. Д., А затем наследовать этот класс.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...