Flask数据库连接池 DBUtils 模块

一、安装

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() # 关闭一个数据库连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值