Flask - 使用MySQL数据池

Posted 你与断剑皆遗憾

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flask - 使用MySQL数据池相关的知识,希望对你有一定的参考价值。

helper.py

技术分享图片
 1 import pymysql
 2 
 3 from settings import Config
 4 
 5 def connect():
 6     conn = Config.POOL.connection()
 7     cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 以 字典的方式 显示
 8     return conn,cursor
 9 
10 
11 def connect_close(conn,cursor):
12     cursor.close()
13     conn.close()
14 
15 def fetch_all(sql,args):
16     conn,cursor = connect()
17 
18     cursor.execute(sql, args)
19     record_list = cursor.fetchall()
20     connect_close(conn,cursor)
21 
22     return record_list
23 
24 
25 def fetch_one(sql, args):
26     conn, cursor = connect()
27     cursor.execute(sql, args)
28     result = cursor.fetchone()
29     connect_close(conn, cursor)
30 
31     return result
32 
33 
34 def insert(sql, args):
35     conn, cursor = connect()
36     row = cursor.execute(sql, args)
37     conn.commit()
38     connect_close(conn, cursor)
39     return row
View Code

 

settings.py

技术分享图片
 1 from DBUtils.PooledDB import PooledDB, SharedDBConnection
 2 import pymysql
 3 # 下载  DBUtils : pip3 install DBUtils
 4 class Config(object):
 5     SALT = b"sdf1123df"
 6     SECRET_KEY = asdf123sdfsdfsdf
 7     MAX_CONTENT_LENGTH = 1024 * 1024 * 7
 8 
 9 
10     POOL = PooledDB(
11         creator=pymysql,  # 使用链接数据库的模块
12         maxconnections=6,  # 连接池允许的最大连接数,0和None表示不限制连接数
13         mincached=2,  # 初始化时,链接池中至少创建的空闲的链接,0表示不创建
14         maxcached=5,  # 链接池中最多闲置的链接,0和None不限制
15         maxshared=3,
16         # 链接池中最多共享的链接数量,0和None表示全部共享。PS: 无用,因为pymysql和MySQLdb等模块的 threadsafety都为1,所有值无论设置为多少,_maxcached永远为0,所以永远是所有链接都共享。
17         blocking=True,  # 连接池中如果没有可用连接后,是否阻塞等待。True,等待;False,不等待然后报错
18         maxusage=None,  # 一个链接最多被重复使用的次数,None表示无限制
19         setsession=[],  # 开始会话前执行的命令列表。如:["set datestyle to ...", "set time zone ..."]
20         ping=0,
21         # ping MySQL服务端,检查是否服务可用。# 如:0 = None = never, 1 = default = whenever it is requested, 2 = when a cursor is created, 4 = when a query is executed, 7 = always
22         host=127.0.0.1,
23         port=3306,
24         user=root,
25         password=123456,
26         database=db2,
27         charset=utf8
28     )
View Code

 

views.py

技术分享图片
 1 @account.route(/login/, methods=[GET, POST])
 2 def login():
 3     ‘‘‘
 4     登陆
 5     :return:
 6     ‘‘‘
 7     if request.method == GET:
 8         return render_template(login.html)
 9 
10     username = request.form.get(user)
11     password = request.form.get(pwd)
12 
13     pwd_md5 = md5(password)
14 
15     data = helper.fetch_one("select id,nickname from userinfo where user=%s and pwd =%s", (username, pwd_md5))
16 
17     if not data:
18         return render_template(login.html, error=用户名密码错误)
19 
20     # session[user_info] = data
21     session[user_info] = {id: data[id], nickname: data[nickname]}
22 
23     return redirect(/home/)
View Code

 

以上是关于Flask - 使用MySQL数据池的主要内容,如果未能解决你的问题,请参考以下文章

flask--数据库连接池

在终端和 Django 或 Flask 的代码模块中使用 python 多处理池

使用redis+flask维护动态代理池

Flask:wtforms组件 & 数据库连接池 DBUtils

flask 数据库连接池

Python Flask数据库连接池