Python操作数据库 -- 连接池

  1. 连接池:

连接池是一种标准技术,用于在内存中维护长时间运行的连接,以便有效地重用,并未应用程序可能同时使用的连接总数提供管理。特别是对于服务器端Web应用程序,连接池是内存中维护活动数据库连接池的标准方法,这些活动数据库连接在请求之间重复使用。

sqlAlchemy包括几个连接池实现,这些实现与Engine。 他们还可以直接用于希望像其他浦东DBAPI方法添加池的应用程序。

  1. sqlalchemy 连接池配置:

create_engine() 在大多数情况下,函数具有 QueuePool集成,预先配置了合理的池默认值,最常见 QueuePool优化参数可以直接传递到create_engine()作为关键字参数:pool_size, max_overflow, pool_recycle 和 pool_timeout。

engine = create_engine('postgresql://me@localhost/mydb',
                       pool_size=20, max_overflow=0)
  1. 使用DBUtils:
  • DBUtils是一套用于管理数据库连接池的Python包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放。并允许对非线程安全的数据库接口进行线程安全包装。

  • 两种外部接口:

  • PersistentDB:提供线程专用的数据库连接,并自动管理连接。

  • PooledDB:提供线程间可共享的数据库连接,并自动管理连接。

  • 代码示例:

import pymysql
from dbutils.pooled_db import PooledDB

db_config = {
    'host': '192.168.246.129',
    'port': 3306,
    'user': 'testuser',
    'passwd': 'testpass',
    'db': 'testdb',
    'charset': 'utf8mb4',
    'maxconnections': 0,     # 连接池允许的最大连接数
    'mincached': 4,          # 初始化时连接池中至少创建的空闲的连接,0表示不创建
    'maxcached': 0,          # 连接池中最多闲置的连接,0表示不限制,连接使用完成后的空闲连接保留数。
    'maxusage': 5,           # 每个连接最多被重复使用的次数,None表示不限制
    'blocking': True         # 连接池中如果没有可用连接后是否阻塞等待,
                             # True 等待,让用户等待,尽可能的成功; False 不等待然后报错,尽快告诉用户错误,例如抢购,不成功就提示。

}

spool = PooledDB(pymysql, **db_config)
conn = spool.connection()
cur = conn.cursor()
SQL = 'select * from bookorm;'
cur.execute(SQL)
f = cur.fetchall()
print(f)
cur.close()
conn.close()

参考资料:

  1. Python数据库连接池DBUtils详解:https://www.cnblogs.com/zhuminghui/p/10930846.html
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容