MySQL數據庫池
(圖片來(lái)源網(wǎng)絡(luò ),據庫侵刪)MySQL數據庫池是數數據一種數據庫連接管??理技術(shù),它的據庫主要(′?_?`)目的是減少創(chuàng )建和關(guān)閉數據庫連接所需的時(shí)間和系統資源,在實(shí)際應用中,數數據我們經(jīng)常需要與數據庫進(jìn)行(xing)頻繁的據庫交互,每次交互都需要建立和關(guān)閉數據庫連接,數數據這會(huì )導致大量的據庫系統資源浪費,通過(guò)使用數據庫池,數數據我們可以復用已經(jīng)建立的據庫數據庫連接,從而大大提高系統的數數據性能。
數據庫池的優(yōu)點(diǎn)
1、
2、節約資源:數據庫池可以復用已經(jīng)建立的數據庫連接,從??而減少系統資源的消耗。
3、提高穩定性:數據庫池可以有效地管理數據庫連接,避免因為過(guò)多的數據庫連接而導致系統崩潰。
在Python中,我們可以使用pym??ysql庫來(lái)實(shí)現MySQL數??據庫池,以??下是一個(gè)簡(jiǎn)單的示例:
import pymysqlfrom DBUtils.PooledDB imp??ort PooledDB配置數據(′▽?zhuān)?)庫連接信息db_config = { 'host': 'localhost', 'port': 3306, 'user': 'root', 'password': 'password', 'database': 'test', 'charset': 'utf8'}創(chuàng )建數據庫連接池pool = PooledDB(pymysql, mincached=1, maxcached=5, **db_config)從連接池中獲取??一個(gè)連接conn = pool.connection()cursor = conn.cursor()執行SQL語(yǔ)句sql = "SELECT * FROM users"curs?or.execute(sql)results = curs??or.fetchall()for ro(′▽?zhuān)?w in results: print(??row)關(guān)閉游標和連接cursor.close()conn.close()?數據庫池的配置參數
| 參數名 | 默認值 | 描述 |
mincac??hed?? | 1 | 初始化時(shí),連接池中至少創(chuàng )建的空閑的連接數 |
maxcached | 5 | 連接池中最多閑置的連接數 |
maxshared | 3 | 連接池中最多共享的連接(′?`)數 |
maxconnection(′?`)s | 100 | 連接池中最多連接數 |
blocking(′-ι_-`) | True | 如果設為T(mén)rue,那么當所有連接都在忙碌時(shí),新的請求會(huì )等待;如果設為False,那么新的請求會(huì )拋出異常 |
maxusage | None | 一個(gè)連接最多可以被重復使用的次數 |
setse??ssion | None | 開(kāi)始事務(wù)之前設??置的Session對象 |
ping | 0 | ping命令的發(fā)送間隔(秒) |
host | None | 數據庫主機名 |
port | None | 數據庫端口號 |
user | None | 數據庫用戶(hù)名 |
password | None | 數據庫密碼 |
database | None | 要使用的數據庫名稱(chēng) |
charset | None | 客戶(hù)端字符集(默認為“utf8”) |
factory | pymysql.connect | SQLAlchemy引擎使用的工廠(chǎng)類(lèi)??,用于創(chuàng )建新連接實(shí)例 |
reset_session | False | 如果設置為T(mén)rue,則每個(gè)線(xiàn)程都會(huì )擁有自己的Session對象;??否則,Session會(huì )在第一個(gè)請求時(shí)創(chuàng )建,并在該線(xiàn)程的所有請求之間共享,這是必要的,因為SQLAlchemy不是線(xiàn)程安全的。 |
validator | (可選)驗證新創(chuàng )建的連接是否有效的函數,如??果傳入了此??參數,那么必須傳入factory參數。 | |
cursorclass | pymysql.cursors.Cursor | SQLAlchemy引擎使用的游標類(lèi),如果沒(méi)有指定此參數,那么將使用pymysql的默認游標類(lèi)。 |
maxcachedtimeout | None | 如果一個(gè)連接ヽ(′ー`)ノ在被緩存后超過(guò)了這個(gè)時(shí)間(秒),那么它將被丟棄,如果設置為None,那么不會(huì )丟棄任何緩存的連??接。 |
mincachedtimeout | None | 如果一個(gè)連接在被緩存前超過(guò)了這個(gè)時(shí)間(秒),那么它將不會(huì )被緩存,如果設置??為No(╥_╥)ne,那么所有的連接都會(huì )被緩存。 |
maxqueuesize | None | 如果設置了阻塞模式,??并且所有連接都在忙碌,那么新的請求將被放入隊列中等待,這個(gè)參數指定了隊列的(de)最大長(cháng)度,如果設置為None,那么隊列的長(cháng)度沒(méi)有限??制。 |
threadlocal | True | 如果設置為T(mén)rue,那么每個(gè)線(xiàn)程都會(huì )有自己的連接池;否則??,所有線(xiàn)程都共享同一個(gè)連接池,這是必要的,因為SQLAlc(T_T)hemy不是線(xiàn)程安全的。 |
debug | False | 如果設置為T(mén)rue,那么當出現錯誤時(shí),會(huì )打印出詳細的調試信息。 |
|stalecheck
下面是一個(gè)關(guān)于Python中MySQL數據庫連接池和M( ?ヮ?)ySQL數據庫基礎信息的介紹。
| 描述 | |
| 數據庫連接池 | 用于管??理和復用數據庫連接的組件,可以有效提高應用性能和資源利用率 |
| 數據庫 | MySQL,一款廣泛使用的開(kāi)源關(guān)系型數據庫管理系統 |
| 參數/屬性 | 描述 |
| 連接池大小 | 同時(shí)可以處于活動(dòng)狀態(tài)的連接數量 |
| 最大連接數 | 連接池允許的最大連接數 |
| 最小連接數 | 連接池保持的最小連接數 |
連接超時(shí)時(shí)間 | 如果連接池中沒(méi)有可用連接,最(′▽?zhuān)?長(cháng)等待時(shí)間 |
| 連接存活時(shí)間 | 連接在連接池中的最大存活時(shí)間,超過(guò)時(shí)間則被關(guān)閉 |
Python MySQL數據庫┐(′д`)┌
(圖片來(lái)源網(wǎng)絡(luò ),侵刪)| 參數/屬性 | 描述 |
數據庫引擎 | 如In(???)noDB、MyISAM等,決定了數據的存儲方式、索引方式等 |
| 數據庫版本 | 如5.7、8.0等,不同版本支持的特性和性能可能有(you)所不同 |
| 驅動(dòng)程序 | Python連接MySQL??數據庫的庫,如MyS(′?`*)QL Connector/Python、PyMySQL等(deng) |
連接參數 | 包括主機名、???端口號、用戶(hù)名、密碼、數據庫等 |
| SQL語(yǔ)句 | 用于執行數據庫操作,如SELECT、INSERT、UPDATE、DELEヾ(′ω`)?TE等 |