最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

引言

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

功能

  • 連接池本身是線程安全的,可在多線程環(huá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í)行相應操作后,調(diào)用接口返回連接對象;
  • 連接池回收連接對象,并將其加入池中的隊列,供其它請求使用。
|--------|        |--------------|
|  | <==borrow connection object== | Pool manager |
| Client |        |    |
|  | ==return connection object==> | FIFO queue |
|--------|        |--------------|

參數(shù)配置

  • pool_name: 連接池的名稱,多種連接參數(shù)對應多個不同的連接池對象,多單例模式;
  • 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)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

  • Python之site-packages目錄的位置

    Python之site-packages目錄的位置

    這篇文章主要介紹了Python之site-packages目錄的位置,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • python pyecharts 實現(xiàn)一個文件繪制多張圖

    python pyecharts 實現(xiàn)一個文件繪制多張圖

    這篇文章主要介紹了python pyecharts 實現(xiàn)一個文件繪制多張圖,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • python將文本轉(zhuǎn)換成圖片輸出的方法

    python將文本轉(zhuǎn)換成圖片輸出的方法

    這篇文章主要介紹了python將文本轉(zhuǎn)換成圖片輸出的方法,涉及Python操作文本及圖片的相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
    2015-04-04
  • python MySQLdb使用教程詳解

    python MySQLdb使用教程詳解

    本文主要內(nèi)容python MySQLdb數(shù)據(jù)庫批量插入insert,更新update的相關(guān)知識,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-03-03
  • python實現(xiàn)小世界網(wǎng)絡(luò)生成

    python實現(xiàn)小世界網(wǎng)絡(luò)生成

    今天小編就為大家分享一篇python實現(xiàn)小世界網(wǎng)絡(luò)生成,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Python函數(shù)調(diào)用的幾種方式(類里面,類之間,類外面)

    Python函數(shù)調(diào)用的幾種方式(類里面,類之間,類外面)

    本文主要介紹了Python函數(shù)調(diào)用的幾種方式(類里面,類之間,類外面),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-07-07
  • python中使用iterrows()對dataframe進行遍歷的實例

    python中使用iterrows()對dataframe進行遍歷的實例

    今天小編就為大家分享一篇python中使用iterrows()對dataframe進行遍歷的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • PyQt 如何創(chuàng)建自定義QWidget

    PyQt 如何創(chuàng)建自定義QWidget

    這篇文章主要介紹了PyQt 如何創(chuàng)建自定義QWidget,幫助大家更好的理解和學習使用pyqt,感興趣的朋友可以了解下
    2021-03-03
  • 最新評論

    眉山市| 长沙县| 北辰区| 邻水| 东丰县| 马鞍山市| 通渭县| 塘沽区| 化德县| 朝阳市| 荥阳市| 宜城市| 万年县| 阿图什市| 岢岚县| 恩施市| 公安县| 肥西县| 灌云县| 眉山市| 大化| 南澳县| 沽源县| 班戈县| 肇庆市| 麦盖提县| 绥芬河市| 沙河市| 邢台县| 东宁县| 德阳市| 彭州市| 巴楚县| 白水县| 礼泉县| 怀远县| 临安市| 朝阳县| 广灵县| 台北县| 中阳县|