如何在Python中操作MySQL~

一。 python操作資料庫介紹

Python 標準資料庫介面為 Python DB-API,Python DB-API為開發人員提供了資料庫應用程式設計介面。Python 資料庫介面支援非常多的資料庫,你可以選擇適合你專案的資料庫:

GadFly

mSQL

MySQL

PostgreSQL

Microsoft SQL Server 2000

Informix

Interbase

Oracle

Sybase 。。。

你可以訪問Python資料庫介面及API檢視詳細的支援資料庫列表。

不同的資料庫你需要下載不同的DB API模組,例如你需要訪問Oracle資料庫和Mysql資料,你需要下載Oracle和MySQL資料庫模組。

DB-API 是一個規範。 它定義了一系列必須的物件和資料庫存取方式, 以便為各種各樣的底層資料庫系統和多種多樣的資料庫介面程式提供一致的訪問介面 。

Python的DB-API,為大多數的資料庫實現了介面,使用它連線各資料庫後,就可以用相同的方式操作各資料庫。

Python DB-API使用流程:

引入 API 模組。

獲取與資料庫的連線。

執行SQL語句和儲存過程。

關閉資料庫連線。

二。 python操作MySQL模組

Python操作MySQL主要使用兩種方式:

DB模組(原生SQL)

PyMySQL(支援python2。x/3。x)

MySQLdb(目前僅支援python2。x)

ORM框架

SQLAchemy

2。1 PyMySQL模組

本文主要介紹PyMySQL模組,MySQLdb使用方式類似

2。1。1 安裝PyMySQL

PyMySQL是一個Python編寫的MySQL驅動程式,讓我們可以用Python語言操作MySQL資料庫。

2。2 基本使用

2。3 獲取最新建立的資料自增ID

2。4 查詢操作

⚠️ 在fetch資料時按照順序進行,可以使用cursor。scroll(num,mode)來移動遊標位置,如:

cursor。scroll(1,mode=‘relative’)  # 相對當前位置移動

cursor。scroll(2,mode=‘absolute’)  # 相對絕對位置移動

2。5 防止SQL注入

這樣,SQL操作就更安全了。如果需要更詳細的文件參考PyMySQL文件吧。不過好像這些SQL資料庫的實現還不太一樣,PyMySQL的引數佔位符使用%s這樣的C格式化符,而Python自帶的sqlite3模組的佔位符好像是問號(?)。因此在使用其他資料庫的時候還是仔細閱讀文件吧。Welcome to PyMySQL’s documentation

三。 資料庫連線池

上文中的方式存在一個問題,單執行緒情況下可以滿足,程式需要頻繁的建立釋放連線來完成對資料庫的操作,那麼,我們的程式/指令碼在多執行緒情況下會引發什麼問題呢?此時,我們就需要使用資料庫連線池來解決這個問題!

3。1 DBUtils模組

DBUtils是Python的一個用於實現資料庫連線池的模組。

此連線池有兩種連線模式:

為每個執行緒建立一個連線,執行緒即使呼叫了close方法,也不會關閉,只是把連線重新放到連線池,供自己執行緒再次使用。當執行緒終止時,連線才會自動關閉

建立一批連線到連線池,供所有執行緒共享使用(推薦使用)

3。2 模式一

3。2 模式二

⚠️ 由於pymysql、MySQLdb等threadsafety值為1,所以該模式連線池中的執行緒會被所有執行緒共享,因此是執行緒安全的。如果沒有連線池,使用pymysql來連線資料庫時,單執行緒應用完全沒有問題,但如果涉及到多執行緒應用那麼就需要加鎖,一旦加鎖那麼連線勢必就會排隊等待,當請求比較多時,效能就會降低了。

3。3 加鎖

3。4 無鎖(報錯)

此時可以在資料庫中檢視連線情況: show status like ‘Threads%’;

四。 資料庫連線池結合pymsql使用

PS: 可以利用靜態方法封裝到一個類中,方便使用

版權歸原作者所有,如有侵權,請聯絡刪除。