连接池:
连接池是一种标准技术,用于在内存中维护长时间运行的连接,以便有效地重用,并未应用程序可能同时使用的连接总数提供管理。特别是对于服务器端Web应用程序,连接池是内存中维护活动数据库连接池的标准方法,这些活动数据库连接在请求之间重复使用。
sqlAlchemy包括几个连接池实现,这些实现与Engine。 他们还可以直接用于希望像其他浦东DBAPI方法添加池的应用程序。
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)
使用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()
参考资料: