python mysql连接池 pymysql和DBUtils

数据库操作是非常频繁的,为了节省资源和提高响应速度,要应用连接池

库安装:

pip install  PyMysql

pip install DBUtils

pip install Flask

from mysqlpool import mydbpool

@app.route('/loginpost',methods=['POST','GET'])
def start():
    if request.method == 'GET': #此处判断get和post方法与django相同
        pass
        return "not get page"
    else:
        #token = request.headers.get('token')
        if request.form.get('manage_name') is None or request.form.get('manage_pwd') is None:
            #print("aa")
            return redirect("/")
        username = request.form.get('manage_name') #post请求。获取模版语言中输入框输入的值
        password = request.form.get('manage_pwd')
        if len(username)<5 & len(password)<3:
            return redirect("/")
        sql = "select * from user where username=%s and password=%s limit 1"
        dbconn = mydbpool.connection()
        dbcursor = dbconn.cursor()
        dbre = dbcursor.execute(sql,(username,password))
        if dbcursor.rowcount>0:
            dbdata = dbcursor.fetchone()

以上为基于Flask的代码,保存为start.py,表单是登录操作,验证等代码会在以后加上,这里直接使用username和password进行数据库查询,

在查询的时候使用安全查询模式,而没有使用字符串拼接方式,方式注入等非法操作,

然后使用到连接池进行数据库查询和数据行数操作以及fetchone操作,注意,这里的cursor是Dict模式,我的习惯是返回数据要带字段名,方便操作

import pymysql
import time
from DBUtils.PooledDB import PooledDB
import mysql_config as Config#连接池方式时打开读取配置文件
mydbpool = PooledDB(creator=pymysql, mincached=Config.DB_MIN_CACHED , maxcached=Config.DB_MAX_CACHED, 
                        maxshared=Config.DB_MAX_SHARED, maxconnections=Config.DB_MAX_CONNECYIONS, 
                        blocking=Config.DB_BLOCKING, maxusage=Config.DB_MAX_USAGE, 
                        setsession=Config.DB_SET_SESSION,
                        host=Config.DB_HOST , port=Config.DB_PORT , 
                        user=Config.DB_USER , passwd=Config.DB_PASSWORD ,
                        db=Config.DB_DBNAME , use_unicode=False, charset=Config.DB_CHARSET,cursorclass=pymysql.cursors.DictCursor)

以上是连接池代码,保存为mysqlpool.py,注意cursor的模式配置也在这里的最后。

#-*- coding: UTF-8 -*-  
#mysql数据库连接信息
DB_HOST="localhost";
DB_PORT=3306;
DB_DBNAME="python_bbs";
DB_USER="root";
DB_PASSWORD="root";


#数据库连接编码
DB_CHARSET="utf8";

#mincached : 启动时开启的闲置连接数量(缺省值 0 以为着开始时不创建连接)
DB_MIN_CACHED=10;

#maxcached : 连接池中允许的闲置的最多连接数量(缺省值 0 代表不闲置连接池大小)
DB_MAX_CACHED=10;

#maxshared : 共享连接数允许的最大数量(缺省值 0 代表所有连接都是专用的)如果达到了最大数量,被请求为共享的连接将会被共享使用
DB_MAX_SHARED=20;

#maxconnecyions : 创建连接池的最大数量(缺省值 0 代表不限制)
DB_MAX_CONNECYIONS=1000;

#blocking : 设置在连接池达到最大数量时的行为(缺省值 0 或 False 代表返回一个错误; 其他代表阻塞直到连接数减少,连接被分配)
DB_BLOCKING=True;

#maxusage : 单个连接的最大允许复用次数(缺省值 0 或 False 代表不限制的复用).当达到最大数时,连接会自动重新连接(关闭和重新打开)
DB_MAX_USAGE=0;

#setsession : 一个可选的SQL命令列表用于准备每个会话,如["set datestyle to german", ...]
DB_SET_SESSION=None;

 以上是数据库配置文件,就是在mysqlpool.py文件里载入的配置 import mysql_config as Config

你可能感兴趣的:(python)