flask数据库连接池DBUtils
数据库连接池
为啥要使用数据库连接池
- 频繁的连接和断开数据库,消耗大,效率低
- DBUtils可以创建多个线程连接数据库,且一直保持连接,不会断开
- 执行数据库操作时,由数据池分配线程,当数据池空时,可选择等待或者抛错
安装
pip3 install DBUtils
基础用法
- 创建数据池
import time
import threading import pymysql
from DBUtils.PooledDB import PooledDB # 创建数据库连接池
POOL = PooledDB(
creator=pymysql,
maxconnections=20, # 定义最大连接数
mincached=2, # 定义起始连接数
host='127.0.0.1',
blocking=True, # 连接池用完时,True是等待,False时抛错
port=3306,
user='root',
password='123',
database='pooldb',
charset='utf8'
) # 去数据库连接池获取一个连接
conn = POOL.connection() cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
cursor.execute('select * from tb1')
result = cursor.fetchall() # 将此连接放还给连接池
conn.close()
在flask中应用
定义
import pymysql from DBUtils.PooledDB import PooledDB class SQLHelper(object):
def __init__(self):
# 创建数据库连接池
self.pool = PooledDB(
creator=pymysql,
maxconnections=5,
mincached=2,
blocking=True,
host='127.0.0.1',
port=3306,
user='root',
password='123',
database='s23day02',
charset='utf8'
) def connect(self):
conn = self.pool.connection()
cursor = conn.cursor()
return conn,cursor def disconnect(self,conn,cursor):
cursor.close()
conn.close() def fetchone(self,sql,params=None):
"""
获取单条
:param sql:
:param params:
:return:
"""
if not params:
params = []
conn,cursor = self.connect()
cursor.execute(sql, params)
result = cursor.fetchone()
self.disconnect(conn,cursor)
return result def fetchall(self,sql,params=None):
"""
获取所有
:param sql:
:param params:
:return:
"""
import pymysql
if not params:
params = []
conn, cursor = self.connect()
cursor.execute(sql,params)
result = cursor.fetchall()
self.disconnect(conn, cursor)
return result def commit(self,sql,params):
"""
增删改
:param sql:
:param params:
:return:
"""
import pymysql
if not params:
params = [] conn, cursor = self.connect()
cursor.execute(sql, params)
conn.commit()
self.disconnect(conn, cursor) db = SQLHelper()
使用单例模式进行
from flask import Blueprint,url_for,request,render_template,session,redirect
from ..utils.sqlhelper import db # 创建了一个蓝图对象
account = Blueprint('account',__name__) @account.route('/login',methods=['GET','POST'])
def login(): if request.method == 'GET':
return render_template('login.html')
user = request.form.get('user')
pwd = request.form.get('pwd') # 根据用户名和密码去数据库进行校验
# 连接/SQL语句/关闭
result = db.fetchone('select * from user where username=%s and password=%s',[user,pwd])
if result:
# 在session中存储一个值
session['user_info'] = user
return redirect(url_for('user.user_list'))
return render_template('login.html',error="用户名或密码错误")
【说明】SQLhelper类
- 封装了数据库操作的相关方法,以便之后业务功能调取,在一定程度上时减少了代码的重复
- 配合DBUtils,大大提高数据库的操作效率
flask数据库连接池DBUtils的更多相关文章
- Python数据库连接池---DBUtils
Python数据库连接池DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...
- Python数据库连接池DBUtils
Python数据库连接池DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不 ...
- Flask中使用数据库连接池 DBUtils ——(4)
DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...
- Flask的数据库连接池 DBUtils
Flask是没有ORM的操作的,如果在flask中连接数据库有两种方式 一.pymysql 二.SQLAlchemy 是python操作数据库的以一个库,能够进行orm映射官网文档 sqlchemy ...
- Flask(4):wtforms组件 & 数据库连接池 DBUtils
wtforms 组件的作用: --- 生成 HTML 标签 --- form 表单验证 示例代码: app.py from flask import Flask, render_template, r ...
- Python-flask中数据库连接池DBUtils
一.DBUtils DBUtils是Python的一个用于实现数据库连接池的模块. 连接池的三种模式: 第一种模式: 它的缺点:每一次请求反复创建数据库的链接,链接的次数太多 ...
- Python数据库连接池DBUtils.PooledDB
DBUtils 是一套用于管理数据库连接池的包,为高频度高并发的数据库访问提供更好的性能,可以自动管理连接对象的创建和释放.最常用的两个外部接口是 PersistentDB 和 PooledDB,前者 ...
- python之数据库连接池DBUtils
DBUtils 是Python 的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: DBUtils :提供两种外部接口: PersistentDB :提供线程专用的数据库连接,并自动管理连接 ...
- Python的数据库连接池DBUtils
DBUtils是Python的一个用于实现数据库连接池的模块. 此连接池有两种连接模式: 模式一:为每个线程创建一个连接,线程即使调用了close方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...
随机推荐
- Selenium(六)对话框处理与登录测试
1.以百度为例,找到登录框,查看元素,可以看到这是一个div 操作登录框: 通过判断是否找到这个错误提示元素查看是否登录成功. 一个简单的登录脚本:
- jmeter接口测试-使用rsa加密解密算法
本篇介绍jmeter 使用rsa算法进行加密参数 如果测试过程中,部分接口采用了rsa加密算法,我们的jmeter 也是可以直接拿来调用的,不需要开发配合去掉加密代码! 直接上代码 import or ...
- selenium web driver
WebDriver 支持的浏览器 IE6-10 FireFox大部分版本 Chrome Safari Opera Andrioid 系统上的自带浏览器 IOS系统上自带浏览器 HtmlUnit的无界面 ...
- BZOJ 2169 连边 DP
思路:DP 提交:\(1\)次(课上刚讲过) 题解: 如果不管重边的话,我们设\(f[i][j]\)表示连了\(i\)条边,\(j\)个点的度数是奇数的方案数,那么显然我们可以分三种状态转移: \(f ...
- Luogu P2151 [SDOI2009]HH去散步 矩乘加速DP
思路:矩乘优化DP 提交:3次(用了一个奇怪的东西导致常数过大) 题解: 如果可以走完正向边后又走反向边那就显然了,但是不能走,所以我们要将正反向边分别编号,区分正反向边. 所以这道题的矩阵是以边的编 ...
- Java BIO、NIO、AIO 原理
先来个例子理解一下概念,以银行取款为例: 同步 : 自己亲自出马持银行卡到银行取钱(使用同步IO时,Java自己处理IO读写). 异步 : 委托一小弟拿银行卡到银行取钱,然后给你(使用异步IO时,Ja ...
- react 后台(一) react + redux + react-route + webpack+ axios + antd + less
create-react-app 项目名称(项目失败,ant 的样式出不来) 项目技术栈 react + redux + react-route + webpack+ axios + less + a ...
- 牛客 17439:Endless Pallet
题目传送门 算法:min-max 容斥.树上背包.NTT. 题意简述 有一棵 \(n\) 个点的树.一开始所有点都是白色,每次操作会随机选择 \(\frac{n \times (n + 1)}{2}\ ...
- sync、fsync和fdatasync
转自 http://blog.csdn.net/todd911/article/details/11701847 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘 I/O都通过缓 ...
- array_merge与array+array的区别
结果: