Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python PyQt-如何在类销毁时关闭数据库连接_Python_Sqlalchemy_Pyqt - Fatal编程技术网

Python PyQt-如何在类销毁时关闭数据库连接

Python PyQt-如何在类销毁时关闭数据库连接,python,sqlalchemy,pyqt,Python,Sqlalchemy,Pyqt,如果我的类多次使用数据库(许多函数/属性使用数据库中的数据),那么最佳做法是什么:在类的开始创建一次数据库连接,执行多次操作,然后在退出时关闭数据库连接(使用全局变量);或者在每个属性中创建/使用/关闭DB连接(使用局部变量) 如果最好只启动一次连接,然后在类销毁时将其关闭,我该怎么做 def __del__ (self) self.connection.close() 不起作用 谢谢。\uu del\uu函数仅在对象被破坏时调用,也就是在垃圾收集发生时,不再有对象引用它 查看在释放类

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

如果最好只启动一次连接,然后在类销毁时将其关闭,我该怎么做

def __del__ (self)
    self.connection.close()
不起作用


谢谢。

\uu del\uu
函数仅在对象被破坏时调用,也就是在垃圾收集发生时,不再有对象引用它

查看在释放类时仍然引用该类的对象,或者在类上实现显式关闭方法

依赖
\uuu del\uuu
方法释放资源是危险的,因为我们认为对象没有被破坏

来自python文档

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


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

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


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

让GUI代码了解并对DB进行操作是糟糕的软件设计。@EricFortin。MVC是一种被广泛接受的设计模式。我可以挂接closeEvent,但不能直接访问其中的数据库。@EricFortin。好的,谢谢。我可以看出,我的回答可能措词不当,因为我并不是真的想建议直接访问数据库。希望我修改后的答案不会那么有争议。