当前位置:   article > 正文

flask实现mysql连接池_flask数据库连接池DBUtils

flask mysql连接池

数据库连接池

为啥要使用数据库连接池

频繁的连接和断开数据库,消耗大,效率低

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,大大提高数据库的操作效率

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方法,也不会关闭,只是把连接重新放到连接池,供自己线程 ...

随机推荐

MST:Bad Cowtractors(POJ 2377)

坏的牛圈建筑 题目大意:就是现在农夫又要牛修建牛栏了,但是农夫想不给钱,于是牛就想设计一个最大的花费的牛圈给他,牛圈的修理费用主要是用在连接牛圈上 这一题很简单了,就是找最大生成树,把Kruskal算 ...

为什么for(int i=0;i<;9;i++) 在c语言中是错误的?

显示表示,i 变量不可以在for中定义,必须在外面定义,这是为什么? 因为C99标准以前的C标准是不支持临时变量在for循环中定义的. C99标准就支持这样写.但是目前有些编译器并不怎么愿意支持C99 ...

Hadoop Resource

http://www.aiopass4sure.com/cloudera-exams/ccd-410-exam-questions/which-process-describes-the-lifecy ...

多功能节点连线绘图控件Nevron Diagram for .NET使用方法及下载地址

Nevron Diagram for .NET是一个功能强大,世界上顶级的.NET图表控件.可扩展的图形报表构架,可以帮您创建功能丰富的Winforms及Webforms图表解决方案.这个产品构建于N ...

静态变量static

1.在我们平时些程序中我们经常需要一些变量的他们能纪录我们所需要的值,但是平常的int类型达不到这样的目的,所以呢就有了static的基态变量,静态变量就像  B/S中的session,cookio等 ...

【原】Java学习笔记018 - 面向对象

package cn.temptation; public class Sample01 { public static void main(String[] args) { // 继承关系的子类可以 ...

github 搜索

1.明确搜索仓库标题.仓库描述.README GitHub 提供了便捷的搜索方式,可以限定只搜索仓库的标题.或者描述.README等. 以Spring Cloud 为例,一般一个仓库,大概是这样的 其 ...

DRF之解析器源码解析

解析器 RESTful一种API的命名风格,主要因为前后端分离开发出现前后端分离: 用户访问静态文件的服务器,数据全部由ajax请求给到 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己 ...

【2018暑假集训模拟一】Day2题解

T1 园艺工人的求助 [题目描述]终于,在一段繁忙的训练之后,到了NOIP 的举办的时候.同学们坐上了大巴车,享受着沿途的风光,讨论着未解决的问题,憧憬着NOIP 赛场上切题的样子.很快,大巴车到了大 ...

最新的 CocoaPods 的使用教程(一)

发布开源库到CocoaPods的时候.对CocoaPods重新学习了一下. 1.CocoaPods的日常使用 2.创建CocoaPods的私有库 3.创建CocoaPods的开源库 一. CocoaP ...

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/496590
推荐阅读
相关标签
  

闽ICP备14008679号