參考廖雪峯網站
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.關閉連接的時候,把連接放回連接池,而不是真正的關閉,所以可以減少頻繁地打開和關閉連接