MySQLdb最佳实践

Pat*_*ini 5 python mysql resource-management mysql-python

我目前正在开发一个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脚本是多线程的.复杂的进程/线程环境是否会影响哪种方法更合适?

Sin*_*ion 1

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

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