flask——数据库连接池、wtfroms、信号、多app应用、flask-script

系列文章目录

第三章 数据库连接池、wtfroms、信号、多app应用、flask-script、flask请求上下文分析



一、数据库连接池

后端常常需要使用数据库的数据

当我们将数据库链接对象做成全局的就会产生,多个线程操作一个数据库链接对象时,容易导致数据错乱现象(例如一个线程使用该链接对象获取数据还未操作完毕,另一个线程使用该链接对象读取了其他数据,就产生了数据错乱)。

当我们链接数据库时时每个线程开一个链接,这样来了很多请求之后,链接过多会极大的消耗网络、内存资源导致系统运行速度过慢,甚至卡死。

所以针对于flask中我们使用第三方模块dbutils来管理数据库链接数量,这样每次线程执行数据库相关操作都只是从连接池中获取一个连接来进行,无论多少线程过来都只会轮流交替使用连接池的中连接。

DBUtils是Python的一个用于实现数据库连接池的模块

此连接池有两种连接模式:

DBUtils提供两种外部接口:

  1. PersistentDB :提供线程专用的数据库连接,并自动管理连接。
  2. PooledDB :提供线程间可共享的数据库连接,并自动管理连接。

安装 dbutils

pip3 install dbutils

dbutils使用

PersistentDB模式:
为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程再次使用。当线程终止时,连接自动关闭

PooledDB 模式:
创建一批连接到连接池,供所有线程共享使用。

示例以PooledDB 模式为例:

创建一个py文件,用来配置连接池
pool.py

from dbutils.pooled_db import PooledDB
import pymysql

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=[],  # 开始会话前执行的命令列表。
    ping=0,
    # ping MySQL服务端,检查是否服务可用。
    host='127.0.0.1',
    port=3306,
    user='root',
    password='123',
    database='test',
    charset='utf8'
)

测试连接池代码

from flask import Flask
from pool import POOL

app = Flask(__name__)

app.debug = True

@app.route('/')
def show_db():
    # 从池中拿链接,创建出cursor对象
    conn = POOL.connection()
    cursor = conn.cursor()
    cursor.execute('select * from bbc')
    print(cursor.fetchall())
    return '查询成功'
if __name__ == '__main__':
    app.run()

二、wtfroms

wtfroms用于前后端混合的项目,与django中的forms类似
用于校验数据,渲染页面,显示提示信息

安装

pip3 install wtforms

使用

创建一个py文件编写wtforms
myform.py

from flask import Flask, render_template, request
from wtforms.fields import simple
from wtforms import Form
from wtforms import validators
from
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值