小编典典

python中数据库连接池的最佳解决方案是什么?

mysql

我已经开发了一些类似于DAO的自定义类,以满足我的项目的一些非常特殊的要求,这是一个不在任何框架内运行的服务器端进程。

该解决方案非常有效,除了每次发出新请求时,我都会通过MySQLdb.connect打开一个新连接。

将其切换为在python中使用连接池的最佳“插入”解决方案是什么?我在想像Java的通用DBCP解决方案。

该过程运行很长时间,并且有许多线程需要发出请求,但不是所有线程都同时发出请求……特别是在短暂写入大量结果之前,它们做了很多工作。

编辑添加:经过更多搜索后,我发现anitpool.py看起来不错,但是由于我对python相对较新,我想我只是想确保我不会错过一个更明显/更惯用/更好的解决方案。


阅读 502

收藏
2020-05-17

共1个答案

小编典典

IMO的“更明显/更惯用/更好的解决方案”是使用现有的ORM,而不是发明类似DAO的类。

在我看来,ORM比“原始” SQL连接更受欢迎。为什么?因为Python 面向对象,并从SQL行映射到以对象
绝对必要的。在很多情况下,您会处理未映射到Python对象的SQL行。

我认为SQLAlchemySQLObject(以及关联的连接池)是更惯用的Pythonic解决方案。

作为独立功能的池化不是很常见,因为纯SQL(无对象映射)对于受益于连接池的复杂,运行时间长的进程并不普遍。是的,纯粹的SQL
使用,但它总是在池是没有帮助的简单或多个控制应用中使用。

我认为您可能有两种选择:

  1. 修改您的类以使用SQLAlchemy或SQLObject。尽管这乍看起来很痛苦(浪费了所有工作),但您应该能够利用所有设计和思想,并且这只是采用广泛使用的ORM和合并解决方案的一种练习。
  2. 使用概述的算法滚动自己的简单连接池-循环的简单连接集或列表。
2020-05-17