PyQt - 如何在类破坏时关闭数据库连接

时间:2012-01-16 12:37:06

标签: python sqlalchemy pyqt

如果我的类使用数据库很多次(许多函数/属性使用来自数据库的数据),那么最佳做法是:在课程开始时创建一次数据库连接,做很多次,然后在退出时关闭数据库连接(使用全局变量);或者在每个属性中创建/使用/关闭数据库连接(使用局部变量)?

如果最好一次启动连接并在类破坏时关闭它,我该怎么做?

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

不起作用。

谢谢。

3 个答案:

答案 0 :(得分:3)

仅当对象被破坏时才会调用

__del__函数,这是在垃圾收集过程中没有任何对象再次引用它时。

当你放弃它或在你的类上实现显式关闭方法时,要么看到哪个对象仍在引用你的类。

依靠__del__方法释放资源可能会很危险,因为我们认为对象没有被破坏。

来自python文档

  

某些对象包含对“外部”资源的引用,例如打开的文件或窗口。可以理解,当对象被垃圾收集时,这些资源被释放,但由于不能保证垃圾收集发生,这些对象还提供了一种释放外部资源的明确方法,通常是close()方法。强烈建议程序明确关闭此类对象。 'try ... finally'语句提供了一种方便的方法。

答案 1 :(得分:0)

如果另一个类也将使用数据库连接,那么您可以创建一个类,该类将包括用于创建db,连接/关闭db以及从db等检索信息的方法,然后继承此类。

答案 2 :(得分:0)

创建一个可由主窗口类访问的数据库关闭请求函数。

然后您可以在窗口的closeEvent内调用它,也可以根据函数的返回值采取不同的操作。