這篇文章主要介紹“怎么創(chuàng)建python數(shù)據(jù)庫連接池”,在日常操作中,相信很多人在怎么創(chuàng)建python數(shù)據(jù)庫連接池問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么創(chuàng)建python數(shù)據(jù)庫連接池”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
為東山等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及東山網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為網(wǎng)站設(shè)計、成都網(wǎng)站設(shè)計、東山網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!1、不使用數(shù)據(jù)庫連接池,每次操作都要鏈接數(shù)據(jù)庫,鏈接次數(shù)過多
conn = pymysql.connect(host="127.0.0.1",port=3306,user='root',password='123', database='pooldb',charset='utf8') cursor = conn.cursor() cursor.execute("select * from td where id=%s", [5, ]) result = cursor.fetchall() # 獲取數(shù)據(jù) cursor.close() conn.close() # 關(guān)閉鏈接
這種方式每次請求,反復創(chuàng)建數(shù)據(jù)庫鏈接,多次鏈接數(shù)據(jù)庫會非常耗時
2、創(chuàng)建一個鏈接池,為所有線程提供連接,使用時來進行獲取,使用完畢后在放回到連接池。
PS:假設(shè)大鏈接數(shù)有10個,其實也就是一個列表,當你pop一個,系統(tǒng)會再append一個,鏈接池的所有的鏈接都是按照排隊的這樣的方式來鏈接的。鏈接池里所有的鏈接都能重復使用,共享的, 即實現(xiàn)了并發(fā),又防止了鏈接次數(shù)太多
import timeimport pymysqlimport threadingfrom DBUtils.PooledDB import PooledDB, SharedDBConnection POOL = PooledDB( creator=pymysql, # 使用鏈接數(shù)據(jù)庫的模塊 maxconnections=6, # 連接池允許的大連接數(shù),0和None表示不限制連接數(shù) mincached=2, # 初始化時,鏈接池中至少創(chuàng)建的空閑的鏈接,0表示不創(chuàng)建 maxcached=5, # 鏈接池中最多閑置的鏈接,0和None不限制 maxshared=3, # 鏈接池中最多共享的鏈接數(shù)量,0和None表示全部共享。PS: 無用,因為pymysql和MySQLdb等模塊的 threadsafety都為1,所有值無論設(shè)置為多少,_maxcached永遠為0,所以永遠是所有鏈接都共享。 blocking=True, # 連接池中如果沒有可用連接后,是否阻塞等待。True,等待;False,不等待然后報錯 maxusage=None, # 一個鏈接最多被重復使用的次數(shù),None表示無限制 setsession=[], # 開始會話前執(zhí)行的命令列表。如:["set datestyle to ...", "set time zone ..."] ping=0, # ping MySQL服務(wù)端,檢查是否服務(wù)可用。# 如: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='123', database='pooldb', charset='utf8')def func(): # 檢測當前正在運行連接數(shù)的是否小于大鏈接數(shù),如果不小于則:等待或報raise TooManyConnections異常 # 否則 # 則優(yōu)先去初始化時創(chuàng)建的鏈接中獲取鏈接 SteadyDBConnection。 # 然后將SteadyDBConnection對象封裝到PooledDedicatedDBConnection中并返回。 # 如果最開始創(chuàng)建的鏈接沒有鏈接,則去創(chuàng)建一個SteadyDBConnection對象,再封裝到PooledDedicatedDBConnection中并返回。 # 一旦關(guān)閉鏈接后,連接就返回到連接池讓后續(xù)線程繼續(xù)使用。 # PooledDedicatedDBConnection conn = POOL.connection() # print(th, '鏈接被拿走了', conn1._con) # print(th, '池子里目前有', pool._idle_cache, '\r\n') cursor = conn.cursor() cursor.execute('select * from tb1') result = cursor.fetchall() conn.close()
到此,關(guān)于“怎么創(chuàng)建python數(shù)據(jù)庫連接池”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前題目:怎么創(chuàng)建python數(shù)據(jù)庫連接池-創(chuàng)新互聯(lián)
網(wǎng)址分享:http://aaarwkj.com/article22/pgpjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)頁設(shè)計公司、Google、做網(wǎng)站、網(wǎng)站導航、定制網(wǎng)站、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容