数据库操作是非常频繁的,为了节省资源和提高响应速度,要应用连接池
库安装:
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