一、安装
pip install DBUtils
二、配置参数
db.py文件
import pymysql
from DBUtils.PooledDB import PooledDB, SharedDBConnection
POOL = PooledDB(
creator=pymysql, # 使用链接数据库的模块
maxconnections=6, # 连接池允许的最大连接数,0和None表示不限制连接数
mincached=2, # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
maxcached=5, # 链接池中最多闲置的链接,0和None不限制
maxshared=3, # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,
# 因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论
# 设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
blocking=True, # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
maxusage=None, # 一个链接最多被重复使用的次数,None表示无限制
setsession=[], # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
ping=0,
# ping MySQL服务端,检查是否服务可用。
# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created,
# 4 = when a query is executed, 7 = always
host='127.0.0.1',
port=3306,
user='root', #用户名
password='root', #密码
database='users', #库名
charset='utf8',
cursorclass = pymysql.cursors.DictCursor # 配置数据已字典的类型返回,不配置返回元组
# 在默认情况下cursor方法返回的是BaseCursor类型对象,BaseCursor类型对象在执行查询后每条记录的结果以列表(list)表示。
# 如果要返回字典(dict)表示的记录,就要设置cursorclass参数为pymysql.cursors.DictCursor类。
)
三、基本使用
app.py文件
from flask import Flask
from db import POOL # 导入
import pymysql
app = Flask(__name__)
app.secret_key ='sdfsdfsdf'
@app.route('/index')
def index():
# 方式一:缺点:每次请求反复创建数据库连接,连接数太多
# conn = pymysql.connect()
# cursor = conn.cursor()
# cursor.execute('SELECT * FROM tb WHERE name = %s',(‘xiaoqing’, ))
# result = cursor.fetchall()
# cursor.close()
# conn.close()
# print(result)
# 方式二:缺点,不能支持并发
# pymysql.threadsafety
# with LOCK:
# cursor = CONN.cursor()
# cursor.execute('SELECT * FROM tb WHERE name = %s',(‘xiaoqing’, ))
# result = cursor.fetchall()
# cursor.close()
#
# print(result)
# 方式三:基于DBUtils实现数据连接池
# - 为没个线程创建一个连接,该线程关闭时,不是真正关闭;本线程再次调用时,
# 还是使用的最开始创建的连接。直到线程终止,数据库连接才关闭。
# - 创建一个连接池(10个连接),为所有线程提供连接,使用时来进行获取,使用完毕后,再次放回到连接池。
conn = POOL.connection()
cursor = conn.cursor()
cursor.execute('SELECT * FROM tb1')
result = cursor.fetchall()
conn.close()
return '执行成功'
if __name__ == '__main__':
app.run()
DBUtils基本方法
conn = POOL.connection() # 创建一个数据库连接
cursor = conn.cursor() # 获得数据库指针
cursor.execute('SELECT * FROM tb1 WHERE id=%s',(1)) # 添加SQL语句
conn.commit() # 把要添加、修改的数据提交到数据库中
result = cursor.fetchall() # 获取相应表中的所有内容
resultone = cursor.fetchone() # 获取相应表中的一条内容
result = fetchmany(3) # 获取指定数据的数量
cursor.close() # 关闭指针
conn.close() # 关闭一个数据库连接