PyQt - 如何在类销毁时关闭数据库连接
如果我的类需要多次使用数据库(很多函数或属性都要用到数据库里的数据),那么最好的做法是什么呢?是一次性在类开始的时候建立一个数据库连接,然后在需要的时候多次使用,最后在退出时关闭这个连接(用全局变量);还是在每个属性里都建立、使用和关闭数据库连接(用局部变量)?
如果一次建立连接然后在类结束时关闭连接更好,我该怎么做呢?
def __del__ (self)
self.connection.close()
这个方法不行。
谢谢。
3 个回答
0
创建一个数据库关闭请求的功能,这个功能可以在主窗口类中使用。
然后你可以在窗口的 closeEvent
里调用这个功能,可能还可以根据这个功能返回的结果采取不同的行动。
0
如果其他类也需要使用数据库连接,那么你可以创建一个类,这个类里面包含一些方法,比如创建数据库、连接和关闭数据库,以及从数据库中获取信息等等。然后其他类就可以继承这个类,使用里面的方法。
3
__del__
这个函数只有在对象被销毁时才会被调用,也就是说,当没有其他对象再引用这个对象时,垃圾回收机制才会进行清理。
你可以查看一下在你放弃这个对象时,哪个对象还在引用你的类,或者在你的类里实现一个显式的关闭方法。
依赖 __del__
方法来释放资源可能会有风险,因为我们认为对象已经被销毁时,实际上它可能还没有被销毁。
根据Python的文档:
有些对象会包含对“外部”资源的引用,比如打开的文件或窗口。我们知道这些资源在对象被垃圾回收时会被释放,但由于垃圾回收并不是一定会发生,因此这些对象通常会提供一个显式的方法来释放外部资源,通常是一个
close()
方法。强烈建议程序显式地关闭这些对象。使用‘try...finally’语句可以方便地做到这一点。