如果我的类使用数据库很多次(许多函数/属性使用来自数据库的数据),那么最佳做法是:在课程开始时创建一次数据库连接,做很多次,然后在退出时关闭数据库连接(使用全局变量);或者在每个属性中创建/使用/关闭数据库连接(使用局部变量)?
如果最好一次启动连接并在类破坏时关闭它,我该怎么做?
def __del__ (self)
self.connection.close()
不起作用。
谢谢。
答案 0 :(得分:3)
__del__
函数,这是在垃圾收集过程中没有任何对象再次引用它时。
当你放弃它或在你的类上实现显式关闭方法时,要么看到哪个对象仍在引用你的类。
依靠__del__
方法释放资源可能会很危险,因为我们认为对象没有被破坏。
来自python文档
某些对象包含对“外部”资源的引用,例如打开的文件或窗口。可以理解,当对象被垃圾收集时,这些资源被释放,但由于不能保证垃圾收集发生,这些对象还提供了一种释放外部资源的明确方法,通常是close()方法。强烈建议程序明确关闭此类对象。 'try ... finally'语句提供了一种方便的方法。
答案 1 :(得分:0)
如果另一个类也将使用数据库连接,那么您可以创建一个类,该类将包括用于创建db,连接/关闭db以及从db等检索信息的方法,然后继承此类。
答案 2 :(得分:0)
创建一个可由主窗口类访问的数据库关闭请求函数。
然后您可以在窗口的closeEvent
内调用它,也可以根据函数的返回值采取不同的操作。