Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.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 MySQLdb最佳实践_Python_Mysql_Mysql Python_Resource Management - Fatal编程技术网

Python MySQLdb最佳实践

Python MySQLdb最佳实践,python,mysql,mysql-python,resource-management,Python,Mysql,Mysql Python,Resource Management,我目前正在开发一个Python脚本,它使用从MySQL数据库中提取的一些数据做一些事情。为了访问这些数据,我正在使用模块 本模块遵循中列出的指导原则,包括创建连接对象和后续的游标对象,用于遍历信息 目前,在我的项目中,每当我需要执行MySQL读/写块时,我都会创建一个连接对象,然后在完成后关闭它。但是,我可以轻松地传递连接对象,以避免这些重复的打开/关闭 我的问题是:考虑到安全、资源管理等因素,是否开放;读/写;接近;重复进行下一次读/写操作方法优于开放;读/写;为下一次读/写操作传递连接方法

我目前正在开发一个Python脚本,它使用从MySQL数据库中提取的一些数据做一些事情。为了访问这些数据,我正在使用模块

本模块遵循中列出的指导原则,包括创建连接对象和后续的游标对象,用于遍历信息

目前,在我的项目中,每当我需要执行MySQL读/写块时,我都会创建一个连接对象,然后在完成后关闭它。但是,我可以轻松地传递连接对象,以避免这些重复的打开/关闭

我的问题是:考虑到安全、资源管理等因素,
是否开放;读/写;接近;重复进行下一次读/写操作方法优于
开放;读/写;为下一次读/写操作传递连接方法


编辑:更多上下文。这个特定的Python脚本是多线程的。复杂的进程/线程环境会影响哪种方法更合适吗?

在我看来,最好只在需要时打开连接对象。有时实例化新连接可能会很麻烦,但一般来说,这是更好的做法。

作为我建议在MySQLdb上使用的最佳做法之一


如果我是你,我会在程序执行期间始终保持连接打开,只有在程序结束时才关闭连接。坏的方面是连接池中少了一个连接,好的方面是它为您节省了很多样板文件。

使用数据库连接的多线程应用程序可能应该使用某种类型的连接池。在这个方案中,您有一个预先定义的连接数,所有连接都在某种队列中管理。当线程需要运行事务时,它会从池中获得连接。如果池当前处于空闲状态,则将为线程创建新连接;如果它非常忙,它将使线程等待,直到另一个线程释放连接。当线程完成连接时,它将连接返回到池,池将连接转交给另一个线程,或者如果没有线程等待连接,它将关闭连接


这种逻辑可能有几十种实现方式,但我可以高度推荐SQLAlchemy,而且不仅仅是它的连接管理(尽管你不必使用它来做更多的事情)

为了避免它成为一个简单的“你的观点是什么?”问题,你有统计数据/事实/经验来支持它吗?谢谢老实说,这不是一个真正的“事实”问题,除了您当前在完成后关闭连接的方法稍微好一点的资源管理之外。始终打开连接意味着即使在不需要资源的时候也在使用资源。不过,这并没有多大区别,这更像是一个好的练习问题。这就是它的基本含义。更多的样板文件或不必要的资源使用。另外,建立新连接总是比查询现有连接慢,因此如果你的应用程序频繁停止,不断重新连接可能会显著降低速度。另外,请注意服务器的最大连接限制。