FastAPI 操作 MySQL 資料庫的教程

FastAPI 操作 MySQL 資料庫的教程

在 FastAPI 官方文件中,涉及資料庫操作部分,FastAPI 官方給出了 FastAPI 連線 PostgreSQL 資料庫的案例,對 MySQL 資料庫操作的講解比較少,對於初學者想入入手 FastAPI 加 MySQL 可能比較難。本篇文章就來講講 FastAPI 連線 MySQL 資料庫,並完成一系列的 CRUD,文末將會給出具體的 demo,供大家學習,希望能對正在學習或想學習 FastAPI 的朋友一點點啟發。

這裡,MySQL是什麼?怎麼安裝?就不做過多的講解了,有需要的朋友可以閱讀我之前寫過的一篇 Python 中 MySQL 的基本教程

Python 連線 MySQL 資料庫的教程

01

SQLAlchemy 介紹

在 FastAPI 中對資料庫的操作有一個非常優秀的 ORM 庫,利用此庫在 FastAPI 中操作資料庫可以快速實現 FastAPI 專案連線資料庫,它就是 SQLAlchemy。

SQLAlchemy的主要目標是改變您對資料庫和 SQL 的思考方式!

SQLAlchemy 是Python SQL 工具箱和物件關係對映器,為應用程式開發人員提供了SQL 的全部功能和靈活性。它提供了一整套知名的企業級永續性模式,旨在高效,高效能地訪問資料庫,並適配了簡單、高效能的 Pythonic 語言。

SQLAlchemy 最著名的是物件關係對映器(ORM),它提供了資料對映器模式的可選元件,在該模式下,可以以開放式,多種方式將類對映到資料庫,從而可以在資料庫中開發物件模型和資料庫模式。

02

資料庫配置

在瞭解完 SQLAlchemy 後,開始進入本文核心內容,FastAPI 如何與 MySQL 組合在一起。

首先,配置完成 MySQL 相關的資訊,由於 MySQL 連線資訊相對固定,這裡我將它寫入了全域性配置裡面。

FastAPI 操作 MySQL 資料庫的教程

SQLALCHEMY_DATABASE_URI 這裡的連線格式是以 pymysql 作為連線,具體格式

mysql+pymysql://<username>:<password>@<host>/<dbname>[?<options>]

03

建立資料庫引擎

在配置完成 MySQL 相關資訊之後,建立一個數據庫引擎用於執行資料 CRUD 相關操作。

FastAPI 操作 MySQL 資料庫的教程

create_engine 傳入兩個引數,一個是剛才上面建立的 database uri ,一個是一個

pool_pre_ping (是否預載入連線池),再建立一個 SessionLocal,這裡的Session 指的是 Data Session。

autocommit : 是否自動提交

autoflush:是否自動重新整理並載入資料庫

bind :繫結資料庫引擎

當然,從原始碼中,可以看出 create_engine 還可以接收更多引數,具體引數配置和意義可以參考原始碼閱讀。

FastAPI 操作 MySQL 資料庫的教程

04

建立實體類

在資料庫中,我建立一張 tb_user 使用者表,具體的表結構如下

FastAPI 操作 MySQL 資料庫的教程

在 FastAPI 中使用 SQLAlchemy 操作資料庫,需要新建一個對應資料庫表的實體類,方便實現對資料庫的增刪改查等操作。具體實現方式比 Java 和 C# 都簡單,實現方式如圖

FastAPI 操作 MySQL 資料庫的教程

primary_key 是否主鍵

nullable 可否為空

unique 是否唯一

__tablename__ 設定對映到的表名,我這裡對映到了“tb_user”,如果不設定,預設就是對映到類名“user”下,這裡需要根據你資料庫表名來確定。

05

實現 User 的 CRUD

資料庫 ORM 的 CRUD 操作基本上都是大同小異,很簡單,有點基礎的朋友一般一看就明白了,所以這裡也就不作過多的講解了,直接上程式碼。

建立使用者資訊,接收使用者建立表單,新建一個 User 實體,將表單的資料填充到 User,最後新增、提交資料,完成對一個使用者資訊的錄入。

FastAPI 操作 MySQL 資料庫的教程

建立一個使用者資訊之後需要獲取使用者資訊,這裡根據 userName 獲取使用者資訊

FastAPI 操作 MySQL 資料庫的教程

更新使用者資訊

更新使用者資訊的常規邏輯,傳入修改使用者資訊表單資料,再根據表單資料查詢該使用者是否存在或是否有許可權修改等一系列業務邏輯,還有,多個使用者更新等。這裡,比較簡單的實現方式如下

FastAPI 操作 MySQL 資料庫的教程

增加、獲取、修改、都有了,當然還不能少了刪除。資料刪除雖然說在實際專案中是一個慎用的操作,特別是在今天,資料就是金錢,一秒鐘前的資料可能還值錢,一秒中後的資料可能就是沒用的資料,所以,在實際生產環境中,一定得慎用、少用物理刪除(直接 delete 那種),以免資料丟失造成公司或個人巨大的損失。多用邏輯刪除,一種可以控制的刪除方法,在建立資料表時,給定一個欄位,如 isDel ,根據改變資料狀態達到資料的控制。

FastAPI 操作 MySQL 資料庫的教程

06

實現 API 介面

完成資料庫配置、構建實體、資料庫 CRUD等操作後,開始實現我們的 API 介面,實現 API 介面在於其它端,如移動端、網頁等客戶端能夠操作資料庫,實現客戶端與資料庫之間連通,為客戶端和資料庫之間架起一座高速公路。

建立使用者

FastAPI 操作 MySQL 資料庫的教程

獲取使用者資訊

FastAPI 操作 MySQL 資料庫的教程

使用者資訊更新

FastAPI 操作 MySQL 資料庫的教程

刪除使用者資訊

FastAPI 操作 MySQL 資料庫的教程

以上就是簡單的最簡單、最基礎的 CRUD 操作,大多都是基本的業務邏輯實現,這裡也就不作累述了,有不明白的地方歡飲跟我一起交流。

07

測試 API 介面

API 介面寫完之後,開始做一遍基本的測試,是否能連通資料庫?是否有異常發生?是否有 API 介面需要調整?這些都應該是一個 API 介面服務在出廠前必做的基礎測試內容。

這裡就簡單測試一下剛出爐的使用者 CRUD API 介面

建立使用者資訊,執行專案以後開啟,OpenAPI 文件,找到建立使用者介面,點選“Try it out”開始除錯,填寫表單容如下,點選 “Execute”開始執行。

FastAPI 操作 MySQL 資料庫的教程

FastAPI 操作 MySQL 資料庫的教程

執行狀態碼返回了 200,表明建立使用者成功。

開啟資料庫再次確認是否建立使用者 test 成功。

FastAPI 操作 MySQL 資料庫的教程

在資料庫中確實插入一條名為 test 使用者的資料。

獲取剛才插入的那條資料

FastAPI 操作 MySQL 資料庫的教程

查詢使用者名稱為 test 的使用者資訊

FastAPI 操作 MySQL 資料庫的教程

最後,也成功的查詢到了 test 使用者資訊。

FastAPI 是一個非常強大的庫,有很多地方值得學習,目前,中文社群文件相對缺少,可能有很多 FastAPI 愛好者望而止步,也就錯過了瞭解並實現高效、強大的 FastAPI 專案的機會。

本人才疏學淺,僅以此文記錄個人在 FastAPI 使用 MySQL 資料庫時的一些心得體會,希望能對後來 FastAPI 愛好者的一些啟發或收穫。

FastAPI 操作 MySQL 資料庫的教程

RESTful API開發實戰 使用REST JSON XML和JAX-RS構建微服務 大資料和Web服務應用

檢視

想了解更多精彩內容,快來關注ProgrammerRan

Python+FastAPI 建立API服務講解

Python 快速搭建 RESTful API

Python 快速搭建一個 Web 專案