当前位置: 首页 > 面试题库 >

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

许华清
2023-03-14
问题内容

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

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

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

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

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


问题答案:

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

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

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

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

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

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


 类似资料:
  • 问题内容: 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django-openid-auth,似乎已经死了 django-authopenid django-socialauth(还提供对Twitter和Facebook帐户的身份验证) django-socialregistration(也具有Fa

  • 问题内容: 目前,我们正在使用带有8gb RAM的4个cpu窗口框,并在同一框上安装了MySQL5.x。我们正在为应用程序使用Weblogic应用程序服务器。我们的应用程序目标是200个并发用户(显然不是同一模块/屏幕)。那么,我们应该在连接池中配置的最佳连接数是多少(最小和最大数)(我们正在使用weblogic AS的连接池机制)? 问题答案: 这个问题有一个非常简单的答案: 连接池中的连接数应

  • 问题内容: 请注意 :这是一个古老的问题,带有古老的答案。现在大多数链接的应用程序都不再需要维护。这些天来,大多数人似乎都使用django- allauth 或python-social- auth 。为了后代的缘故,下面将完整保留原始问题。 至少有六打Django应用程序为Django提供OpenID身份验证: django-openid django-openid-auth 另一个django

  • 本文向大家介绍解释一下什么是池化设计思想。什么是数据库连接池?为什么需要数据库连接池?相关面试题,主要包含被问及解释一下什么是池化设计思想。什么是数据库连接池?为什么需要数据库连接池?时的应答技巧和注意事项,需要的朋友参考一下 池话设计应该不是一个新名词。我们常见的如java线程池、jdbc连接池、redis连接池等就是这类设计的代表实现。这种设计会初始预设资源,解决的问题就是抵消每次获取资源的消

  • 问题内容: 我非常喜欢Rails的数据库迁移管理系统。它不是100%完美的,但却可以解决问题。Django还没有附带这样的数据库迁移系统(但是?),但是有许多开源项目可以做到这一点,例如django-evolution和south。 所以我想知道,你更喜欢Django的哪种数据库迁移管理解决方案?(请为每个答案一个选项) 问题答案: 我一直在使用South,但是Migratory看起来也很有前途。

  • 我正在使用hikari cp和spring boot应用程序,它有超过1000个并发用户。我已经设置了最大池大小- 当我使用 它显示的最大值为300,等于池大小。它永远不会增加超过最大池。这是故意的吗?我认为池大小意味着保持连接,以便在将来需要数据库请求时可以重用连接,但在需要时可以进行更多连接。 另外,当我删除max pool配置时,我会立即得到- HikariPool-0-连接不可用,请求在3