MySQLdb最佳实践

时间:2011-07-22 14:33:58

标签: python mysql mysql-python resource-management

我目前正在开发一个Python脚本,它可以从MySQL数据库中提取一些数据。要访问此数据,我正在使用模块MySQLdb

该模块遵循PEP 249, the 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脚本是多线程的。复杂的进程/线程环境会影响哪种方法更合适吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

这个逻辑可能有很多实现,但我强烈推荐使用SQLAlchemy,而不仅仅是它的连接管理(尽管你不必使用它远远超过它)

答案 2 :(得分:0)

作为最佳实践之一,我建议使用OurSQL而不是MySQLdb。

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