Python -mysql 連接池

參考廖雪峯網站

MySQL是Web世界中使用最廣泛的數據庫服務器。

SQLite的特點是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。

MySQL是爲服務器端設計的數據庫,能承受高併發訪問,同時佔用的內存也遠遠大於SQLite。


此外,MySQL內部有多種數據庫引擎,最常用的引擎是支持數據庫事務的InnoDB。

1.數據庫連接

1. 安裝MySQL ,http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17-winx64.msi 

2. 在mysql 上授權:如下圖


3. 安裝Python 與MySQL 的API 接口 ---MySQLdb 是用於Python鏈接Mysql數據庫的接口,它實現了Python 數據庫 API 規範 V2.0,基於 MySQL C API 上建立的。


4.數據庫連接:

第一種連接方式:

import MySQLdb
(host="127.0.0.1",user="yangyang",passwd="123456",db="python",charset="utf8")

第二種連接方式:



4.數據庫連接池:

python的數據庫連接池包 DBUtils
DBUtils是一套Python數據庫連接池包,並允許對非線程安全的數據庫接口進行線程安全包裝。DBUtils來自Webware for Python
 
DBUtils提供兩種外部接口:
* PersistentDB :提供線程專用的數據庫連接,並自動管理連接。
* PooledDB :提供線程間可共享的數據庫連接,並自動管理連接。

1. 下載安裝DBUtils

下載地址: https://pypi.python.org/pypi/DBUtils/ 

下載解壓後,使用python setup.py install 命令進行安裝
或者使用 Pip install DBUtils

2.舉例:

import MySQLdb
from DBUtils.PooledDB import PooledDB
db_config = {
        'host': '127.0.0.1',
        'port': 3306,
        'user': 'yangyang',
        'passwd': '123456',
        'db': 'MySQL',
        'charset': 'utf8'
    }
pool = PooledDB(MySQLdb, 5, **db_config)
if __name__ == "__main__":
    cnx=pool.connection()
    cus=cnx.cursor()
    SQL="select * from text;"
    try:
        cus.execute(SQL)
        result =cus.fetchall()
        print(result)
        cus.close()
        cnx.commit()
    except Exception as e:
        cnx.rollback()
        # raise e
    finally:
        cnx.close()






PooledDB的參數:
1. mincached,最少的空閒連接數,如果空閒連接數小於這個數,pool會創建一個新的連接
2. maxcached,最大的空閒連接數,如果空閒連接數大於這個數,pool會關閉空閒連接
3. maxconnections,最大的連接數,
4. blocking,當連接數達到最大的連接數時,在請求連接的時候,如果這個值是True,請求連接的程序會一直等待,直到當前連接數小於最大連接數,如果這個值是False,會報錯,
5. maxshared 當連接數達到這個數,新請求的連接會分享已經分配出去的連接
 
uwsgi中,每個http請求都會分發給一個進程,連接池中配置的連接數都是一個進程爲單位的(即上面的最大連接數,都是在一個進程中的連接數),而如果業務中,一個http請求中需要的sql連接數不是很多的話(其實大多數都只需要創建一個連接),配置的連接數配置都不需要太大。
連接池對性能的提升表現在:
1.在程序創建連接的時候,可以從一個空閒的連接中獲取,不需要重新初始化連接,提升獲取連接的速度
2.關閉連接的時候,把連接放回連接池,而不是真正的關閉,所以可以減少頻繁地打開和關閉連接
 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章