5

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

该模块遵循PEP 249,Python DB API中规定的指南,并涉及创建连接对象和后续游标对象,用于迭代信息。

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

我的问题是:考虑到安全性、资源管理等,open; read/write; close; repeat for the next read/write;方法论比open; read/write; pass connection on for the next read/write;方法好吗?

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

4

3 回答 3

1

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

于 2011-07-22T14:36:21.570 回答
1

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

这种逻辑可能有几十种实现,但我强烈推荐 SQLAlchemy,并且不仅仅是连接管理(尽管您不必使用它来做更多的事情)

于 2011-07-23T04:02:43.587 回答
0

作为最佳实践之一,我建议在 MySQLdb 上使用OurSQL

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

于 2011-07-22T14:50:39.593 回答