标题:Python 使用 PyMysql、DBUtils 创建连接池提升性能
背景
Python 是一门流行的编程语言,在访问数据库时使用 PyMySQL 可以很方便的实现数据的增、删、改、查。然而,在高并发场景下,每次都建立连接的方式效率低下,因此需要使用连接池技术。
连接池介绍
连接池是一组已经建立好的数据库连接对象集合,连接池在项目启动后就预先创建好,当需要访问数据库时,就直接从连接池里获取一个连接对象,节约了每次创建连接的时间。
PyMySQL 和 DBUtils
PyMySQL 是 Python 语言操作 MySQL 数据库的库,是在 Python3 里面用来连接 MySQL 服务器的一个库。DBUtils 是 Python 数据库连接池的一个库,它建立在 PyMySQL 之上,旨在提高大并发下的数据库连接效率。PyMySQL 和 DBUtils 都可以独立使用,但结合使用会更加方便。
示例 1
下面是一个使用 PyMySQL 和 DBUtils 来创建连接池的示例代码:
import pymysql
from dbutils.pooled_db import PooledDB
class DBHelper():
def __init__(self, host, port, user, password, db_name, charset='utf8'):
self.pool = PooledDB(
creator=pymysql,
maxconnections=6, # 连接池允许的最大连接数,0 和 None 的意思一样都是不限制连接数
mincached=2, # 初始化时,连接池中至少创建的空闲的连接,0 代表不创建
maxcached=5, #连接池中最多闲置的连接数,0 和 None 的意思一样,都表示不闲置
maxshared=3,
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待,True 表示等待,否则不等待直接报错
setsession=[], # 用于传递到数据库的额外参数
ping=0,
host=host,
port=port,
user=user,
password=password,
database=db_name,
charset=charset
)
def get_conn(self):
return self.pool.connection()
def close(self, conn, cur):
#释放资源
cur.close()
conn.close()
在创建 DBHelper 对象时,就会创建好连接池。使用 get_conn() 函数获取连接对象,使用 close() 函数释放资源。
示例 2
下面是一个使用连接池的简单示例:
db = DBHelper('127.0.0.1', 3306, 'root', '123456', 'test')
conn = db.get_conn()
cur = conn.cursor()
cur.execute("SELECT * FROM user")
results = cur.fetchall()
for row in results:
print(row)
db.close(conn, cur)
以上代码中,通过 DBHelper 对象获取连接对象,然后使用这个连接对象进行执行 SQL 语句。最后使用 DBHelper.close() 函数释放资源。
小结
使用连接池可以大幅度提高服务的性能,通过参考上述示例代码,可以很方便地使用 PyMySQL 和 DBUtils 来创建连接池,并提高数据库操作的效率。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python 使用 PyMysql、DBUtils 创建连接池提升性能 - Python技术站