Flask使用mysql資料池

2022-07-04 00:30:10 字數 2997 閱讀 8296

helper.py

import

pymysql

from settings import

config

defconnect():

conn =config.pool.connection()

cursor = conn.cursor(cursor=pymysql.cursors.dictcursor) #

以 字典的方式 顯示

return

conn,cursor

defconnect_close(conn,cursor):

cursor.close()

conn.close()

deffetch_all(sql,args):

conn,cursor =connect()

cursor.execute(sql, args)

record_list =cursor.fetchall()

connect_close(conn,cursor)

return

record_list

deffetch_one(sql, args):

conn, cursor =connect()

cursor.execute(sql, args)

result =cursor.fetchone()

connect_close(conn, cursor)

return

result

definsert(sql, args):

conn, cursor =connect()

row =cursor.execute(sql, args)

conn.commit()

connect_close(conn, cursor)

return row

view code

settings.py

from dbutils.pooleddb import

pooleddb, shareddbconnection

import

pymysql

#class

config(object):

salt = b"

sdf1123df

"secret_key = '

asdf123sdfsdfsdf

'max_content_length = 1024 * 1024 * 7pool =pooleddb(

creator=pymysql, #

使用鏈結資料庫的模組

maxconnections=6, #

連線池允許的最大連線數,0和none表示不限制連線數

mincached=2, #

初始化時,鏈結池中至少建立的空閒的鏈結,0表示不建立

maxcached=5, #

鏈結池中最多閒置的鏈結,0和none不限制

maxshared=3,

#鏈結池中最多共享的鏈結數量,0和none表示全部共享。ps: 無用,因為pymysql和mysqldb等模組的 threadsafety都為1,所有值無論設定為多少,_maxcached永遠為0,所以永遠是所有鏈結都共享。

blocking=true, #

連線池中如果沒有可用連線後,是否阻塞等待。true,等待;false,不等待然後報錯

maxusage=none, #

乙個鏈結最多被重複使用的次數,none表示無限制

setsession=, #

開始會話前執行的命令列表。如:["set datestyle to ...", "set time zone ..."]

ping=0,

#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

host='

127.0.0.1',

port=3306,

user='

root',

password='

123456',

database='

db2'

, charset='

utf8

')

view code

views.py

@account.route('

/login/

', methods=['

get', '

post'])

deflogin():

'''登陸

:return:

'''if request.method == '

get'

:

return render_template('

login.html')

username = request.form.get('

user')

password = request.form.get('

pwd'

) pwd_md5 =md5(password)

data = helper.fetch_one("

select id,nickname from userinfo where user=%s and pwd =%s

", (username, pwd_md5))

ifnot

data:

return render_template('

login.html

', error='

使用者名稱密碼錯誤')

#session['user_info'] = data

session['

user_info

'] =

return redirect('

/home/

')

view code

mysql資料連線池

示例 usr bin python coding utf 8 time 2017 11 21 0021 10 52 author liaochao file demo2.py import mysqldb from dbutils.pooleddb import pooleddb db config...

mysql 執行緒池 Mysql 執行緒池

why 在5.6以前,mysql會對每個連線建立乙個執行緒,請求結束後銷毀執行緒。在高併發的情況下,為了避免頻繁建立和釋放連線,可以通過thread cache將執行緒快取起來,請求來了先嘗試從cache中獲取,重複利用執行緒資源。問題在低併發的情況下,thread cache可以成為乙個有效的優化...

mysql 資料預熱 mysql預熱緩衝池

在資料庫壓力很大的情況下,重啟完資料庫,通過手工執行下列語句,把熱資料載入到innodb buffer pool緩衝池中進行預熱,從而避免早高峰連線數公升高,程式報錯。select count from user select count from 在mysql5.6裡為了解決上述問題,提供了乙個新...