欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool詳解

 更新時間:2017年07月07日 10:27:17   作者:克里斯的小屋  
這篇文章主要跟大家介紹了關(guān)于Python MySQL數(shù)據(jù)庫連接池組件pymysqlpool的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起看看吧。

引言

pymysqlpool本地下載)是數(shù)據(jù)庫工具包中新成員,目的是能提供一個實用的數(shù)據(jù)庫連接池中間件,從而避免在應(yīng)用中頻繁地創(chuàng)建和釋放數(shù)據(jù)庫連接資源。

功能

  • 連接池本身是線程安全的,可在多線程環(huán)境下使用,不必擔(dān)心連接資源被多個線程共享的問題;
  • 提供盡可能緊湊的接口用于數(shù)據(jù)庫操作;
  • 連接池的管理位于包內(nèi)完成,客戶端可以通過接口獲取池中的連接資源(返回 pymysql.Connection);
  • 將最大程度地與 dataobj 等兼容,便于使用;
  • 連接池本身具備動態(tài)增加連接數(shù)的功能,即 max_pool_size 和 step_size 會用于控制每次增加的連接數(shù)和最大連接數(shù);
  • 連接池最大連接數(shù)亦動態(tài)增加,需要開啟 enable_auto_resize 開關(guān),此后當任何一次連接獲取超時發(fā)生,均記為一次懲罰,并且將 max_pool_size 擴大一定倍數(shù)。

基本工作流程

注意,當多線程同時請求時,若池中沒有可用的連接對象,則需要排隊等待

  • 初始化后優(yōu)先創(chuàng)建 step_size 個連接對象,放在連接池中;
  • 客戶端請求連接對象,連接池會從中挑選最近沒使用的連接對象返回(同時會檢查連接是否正常);
  • 客戶端使用連接對象,執(zhí)行相應(yīng)操作后,調(diào)用接口返回連接對象;
  • 連接池回收連接對象,并將其加入池中的隊列,供其它請求使用。
|--------|        |--------------|
|  | <==borrow connection object== | Pool manager |
| Client |        |    |
|  | ==return connection object==> | FIFO queue |
|--------|        |--------------|

參數(shù)配置

  • pool_name: 連接池的名稱,多種連接參數(shù)對應(yīng)多個不同的連接池對象,多單例模式;
  • host: 數(shù)據(jù)庫地址
  • user: 數(shù)據(jù)庫服務(wù)器用戶名
  • password: 用戶密碼
  • database: 默認選擇的數(shù)據(jù)庫
  • port: 數(shù)據(jù)庫服務(wù)器的端口
  • charset: 字符集,默認為 ‘utf8'
  • use_dict_cursor: 使用字典格式或者元組返回數(shù)據(jù);
  • max_pool_size: 連接池優(yōu)先最大連接數(shù);
  • step_size: 連接池動態(tài)增加連接數(shù)大??;
  • enable_auto_resize: 是否動態(tài)擴展連接池,即當超過 max_pool_size 時,自動擴展 max_pool_size;
  • pool_resize_boundary: 該配置為連接池最終可以增加的上上限大小,即時擴展也不可超過該值;
  • auto_resize_scale: 自動擴展 max_pool_size 的增益,默認為 1.5 倍擴展;
  • wait_timeout: 在排隊等候連接對象時,最多等待多久,當超時時連接池嘗試自動擴展當前連接數(shù);
  • kwargs: 其他配置參數(shù)將會在創(chuàng)建連接對象時傳遞給 pymysql.Connection

使用示例

1、使用 cursor 上下文管理器(快捷方式,但每次獲取都會申請連接對象,多次調(diào)用效率不高):

from pymysqlpool import ConnectionPool
config = {
 'pool_name': 'test',
 'host': 'localhost',
 'port': 3306,
 'user': 'root',
 'password': 'root',
 'database': 'test'
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
# 直接訪問并獲取一個 cursor 對象,自動 commit 模式會在這種方式下啟用
with connection_pool().cursor() as cursor:
 print('Truncate table user')
 cursor.execute('TRUNCATE user')
 print('Insert one record')
 result = cursor.execute('INSERT INTO user (name, age) VALUES (%s, %s)', ('Jerry', 20))
 print(result, cursor.lastrowid)
 print('Insert multiple records')
 users = [(name, age) for name in ['Jacky', 'Mary', 'Micheal'] for age in range(10, 15)]
 result = cursor.executemany('INSERT INTO user (name, age) VALUES (%s, %s)', users)
 print(result)
 print('View items in table user')
 cursor.execute('SELECT * FROM user')
 for user in cursor:
  print(user)
 print('Update the name of one user in the table')
 cursor.execute('UPDATE user SET name="Chris", age=29 WHERE id = 16')
 cursor.execute('SELECT * FROM user ORDER BY id DESC LIMIT 1')
 print(cursor.fetchone())
 print('Delete the last record')
 cursor.execute('DELETE FROM user WHERE id = 16')

2、使用 connection 上下文管理器:

import pandas as pd
from pymysqlpool import ConnectionPool
config = {
 'pool_name': 'test',
 'host': 'localhost',
 'port': 3306,
 'user': 'root',
 'password': 'root',
 'database': 'test'
}
def connection_pool():
 # Return a connection pool instance
 pool = ConnectionPool(**config)
 pool.connect()
 return pool
with connection_pool().connection() as conn:
 pd.read_sql('SELECT * FROM user', conn)
# 或者
connection = connection_pool().borrow_connection()
pd.read_sql('SELECT * FROM user', conn)
connection_pool().return_connection(connection)

更多測試請移步 test_example.py。

依賴

  • pymysql:將依賴該工具包完成數(shù)據(jù)庫的連接等操作;
  • pandas:測試時使用了 pandas。

安裝

輕移步 pymysqlpool: https://github.com/ChrisLeeGit/pymysqlpool 下載源碼(也可以通過本地下載),然后使用 pip 安裝即可:pip3 setup.py install注意需要使用 Python3 環(huán)境。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • Python3如何在服務(wù)器打印資產(chǎn)信息

    Python3如何在服務(wù)器打印資產(chǎn)信息

    這篇文章主要介紹了Python3如何在服務(wù)器打印資產(chǎn)信息,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • python交互式圖形編程實例(三)

    python交互式圖形編程實例(三)

    這篇文章主要為大家詳細介紹了python交互式圖形編程實例第三篇,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • 關(guān)于Python?Selenium自動化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果的問題

    關(guān)于Python?Selenium自動化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果的問題

    這篇文章主要介紹了Python?Selenium自動化導(dǎo)出新版WOS(web?of?science)檢索結(jié)果,本代碼屬于半自動化導(dǎo)出,考慮到開發(fā)效率等因素,有兩處在首次導(dǎo)出時需要手動操作,具體實現(xiàn)過程跟隨小編一起看看吧
    2022-01-01
  • python獲取外網(wǎng)ip地址的方法總結(jié)

    python獲取外網(wǎng)ip地址的方法總結(jié)

    這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下
    2015-07-07
  • Python中正則表達式的用法總結(jié)

    Python中正則表達式的用法總結(jié)

    今天小編就為大家分享一篇關(guān)于Python中正則表達式的用法總結(jié),小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • python中mechanize庫的簡單使用示例

    python中mechanize庫的簡單使用示例

    最近的項目中使用到了mechanize庫,下面寫個簡單使用的小例子給大家參考
    2014-01-01
  • Python的進程及進程池詳解

    Python的進程及進程池詳解

    這篇文章主要為大家介紹了Python的進程及進程池,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-11-11
  • Numpy數(shù)組的廣播機制的實現(xiàn)

    Numpy數(shù)組的廣播機制的實現(xiàn)

    這篇文章主要介紹了Numpy數(shù)組的廣播機制的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • Python:通配符查找、拷貝文件的操作

    Python:通配符查找、拷貝文件的操作

    這篇文章主要介紹了Python:通配符查找、拷貝文件的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 使用OpenCV實現(xiàn)道路車輛計數(shù)的使用方法

    使用OpenCV實現(xiàn)道路車輛計數(shù)的使用方法

    這篇文章主要介紹了使用OpenCV實現(xiàn)道路車輛計數(shù)的使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論