基於DBUtils實現資料庫連線池

2021-09-20 00:13:51 字數 3141 閱讀 7686

紅酥手,黃縢酒,滿城春色宮牆柳。東風惡,歡情薄。一懷愁緒,幾年離索。錯、錯、錯。

春如舊,人空瘦,淚痕紅浥鮫綃透。桃花落,閒池閣。山盟雖在,錦書難託。莫、莫、莫!

mysql資料庫的建立在這就省略了!!!

from flask import flask

import pymysql

def index():

# 鏈結資料庫

conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='', database='homework', charset='utf8')

# 建立指標

cursor = conn.cursor()

# 執行sql語句

cursor.execute("select * from class")

# 獲取資料

result = cursor.fetchall()

# 關閉指標

cursor.close()

# 關閉鏈結

conn.close()

print(result)

return "執行成功"

if __name__ == '__main__':

這種方式每次請求,反覆建立資料庫鏈結,多次鏈結資料庫會非常耗時

from flask import flask

import pymysql

# 鏈結資料庫

conn = pymysql.connect(host="127.0.0.1", port=3306, user='root', password='', database='homework', charset='utf8')

def index():

# 建立指標

cursor = conn.cursor()

# 執行sql語句

cursor.execute("select * from class")

# 獲取資料

result = cursor.fetchall()

# 關閉指標

cursor.close()

# 關閉鏈結

conn.close()

print(result)

return "執行成功"

if __name__ == '__main__':

如果是單執行緒,這樣就可以,但是如果是多執行緒,就得加把鎖。否則資料就不安全了!

from flask import flask

import pymysql

from dbutils.pooleddb import pooleddb

pool = pooleddb(

creator=pymysql, # 使用鏈結資料庫的模組

maxconnections=10, # 連線池允許的最大連線數,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='',

database='homework',

charset='utf8'

)def get_conn():

"""連線資料庫

:return: conn, cursor

"""conn = pool.connection()

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

return conn, cursor

def reset_conn(conn, cursor):

""":param conn: 資料庫連線

:param cursor: 資料庫指標

:return: null

"""cursor.close()

conn.close()

def fetch_all(sql, args):

""":param sql: sql語句

:param args: sql語句的引數

:return: 查詢結果

"""conn, cursor = get_conn()

cursor.execute(sql, args)

result = cursor.fetchall()

reset_conn(conn, cursor)

return result

def index():

res = fetch_all("select * from class", ())

print(res)

return "執行成功"

if __name__ == '__main__':

python資料庫連線工具DBUtils

dbutils是乙個允許在多執行緒python應用和資料庫之間安全及高效連線的python模組套件。dbutils套件包含兩個模組子集,乙個適用於相容db api 2介面的模組,乙個適用於pygresql的模組。dbutils.pooleddb是池化資料庫連線中非常基礎的一種實現。相較於pooled...

DBUtils資料庫連線池

使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...

DBUtils資料庫連線池

使用資料庫連線池技術,可以重複使用多個資料庫連線,避免每次執行資料庫操作都建立連線和關閉連線,也避免了大型應用同時占用多個資料庫連線。以連線mysql為例 import pymysql from dbutils.pooleddb import pooleddb pool pooleddb creat...