FastAPI快速开发Web API项目:MySQL数据库连接
简介
FastAPI不需要我们强制使用SQL(关系型)数据库。所以我们可以根据需要使用任何关系型数据库,例如:
- PostgreSQL
- MySQL
- SQLite
- Oracle
- Microsoft SQL Server
- ...
- .. .
- 基于MySQL 例如,您首先需要安装MySQL的Python库。 FastAPI需要使用MySQL Python客户端库来连接MySQL数据库。这些驱动程序包括
mysql-connector-python
和pymysql
。安装这些库:
pip install mysql-connector-python pymysql
成功安装,如图所示:
用于定义 FastAPI 依赖项的 Python 文件名没有特定的命名约定。一般来说,最好将包含定义 FastAPI 依赖项的函数的 Python 文件命名为与应用程序的功能相匹配的名称。
在终端中运行以下命令在MySQL数据库中创建数据库
example_db
://Login to MySQL mysql -u root -p //Create database named example_db CREATE DATABASE example_db;
创建数据库表❙❙users‼行到数据库表数据:
INSERT INTO users (name) VALUES ("Atom");
文件 db.py
例如,通常将包含定义上例中所示的 MySQL 数据库连接的依赖函数的 Python 文件命名为表示它具有数据库相关函数,例如
db .py
或数据库.py
。此外,如果您有多个定义 FastAPI 依赖项的函数,或者您为不同函数定义依赖项,则可以通过为每个函数指定不同的名称来提高代码可读性。
例如,考虑以下文件名:
db.py
:包含定义 MySQL 数据库连接的依赖项的文件。auth.py
:定义与身份验证相关的依赖项的文件。validation.py
:定义输入数据验证依赖项的文件。
根据项目的大小和结构,您还可以设计目录和模块的层次结构。通过将包含定义依赖项的函数的 Python 文件放入适当的目录并将它们组织到模块中,可以改进代码管理和可维护性。
将 MySQL 客户端库添加到 FastAPI 依赖项:使用 FastAPI 依赖项将 MySQL 客户端库添加到您的应用程序。例如,如果使用
mysql-connector-python
,添加依赖如下:$ touch routers/db.py
然后在文件
db.py❙♶ 使用 MySQL带有路由器的数据库:要将 MySQL 数据库与 FastAPI 路由器一起使用,请使用上面定义的
get_db()
函数作为依赖项。下面是在 FastAPI 路由器中使用 MySQL 数据库的示例。在使用 MySQL 数据库和 FastAPI Router 的示例 Python 文件名中,通常最好根据应用程序的功能和角色来命名它们。您可以想象这样的文件名:
main.py
:包含示例代码的文件,它是应用程序的主要入口点,定义 FastAPI 路由器并使用 MySQL 数据库。router.py
:定义 FastAPI 路由器并包含 MySQL 数据库使用示例代码的文件。db.py
:包含用于连接和查询 MySQL 数据库的函数的文件。
根据项目的大小和结构,您还可以设计目录和模块的层次结构。例如,您可以通过创建名为 Routers 的目录、在其中创建定义 FastAPI 路由器的模块以及包含使用 MySQL 数据库的示例代码来改进代码的组织和可读性。
例如,考虑以下文件名和目录结构:
main.py
:用作应用程序导入和使用路由器目录中的路由器模块的主入口点的文件。routers/db_router.py
:定义使用 MySQL 数据库的示例路由器的模块。routers/db.py
:定义连接和查询MySQL数据库的函数的模块。文件
db_router.py
写入以下内容:from fastapi import FastAPI, Depends from mysql.connector import cursor from db import get_db import json app = FastAPI() # def get_db(db: cursor.MySQLCursor = Depends(get_db)): # return db @app.get("/users/") async def get_users(db: cursor.MySQLCursor = Depends(get_db)): query = "SELECT * FROM users" db.execute(query) result = db.fetchall() if result: return {"users": result} else: return {"error": "User not found"} @app.get("/users/{user_id}") async def get_user(user_id: int, db: cursor.MySQLCursor = Depends(get_db)): query = "SELECT * FROM users WHERE id = %s" db.execute(query, (user_id,)) result = db.fetchall() if result: return {"user_id": result[0][0], "username": result[0][1]} else: return {"error": "User not found"} @app.get("/user_name/{user_name}") async def insert_user(user_name: str, db: cursor.MySQLCursor = Depends(get_db)): query = "INSERT INTO users (name) VALUES (%s)" db.execute(query, (user_name,)) result = db.fetchone() db.execute("COMMIT") return {"user_name": user_name}
启动FastAPI服务
uvicorn db_router:app --reload INFO: Will watch for changes in these directories: ['/Users/sharland/dev/fastapi/MySQL/routers'] INFO: Uvicorn running on http://127.0.0.1:8000 (Press CTRL+C to quit) INFO: Started reloader process [60501] using WatchFiles INFO: Started server process [60503] INFO: Waiting for application startup. INFO: Application startup complete.
当您在浏览器中访问
http://127.0.0.1时,ADD:0.0.1: 一个屏幕将出现,允许您使用 GUI 控制 Express API 服务。
,结果为:访问
http://127.0.0.1:8000/users/
,可以获取当前数据库中的所有用户数据:"users":[[1,"Atom","2023-04-20T13:14:00"],[2,"Nuoza","2023-04-20T13:14:20"]]}
访问17时:http://127.0.0.0 8000 /users /1
{"user_id":1,"username":"Atom"}
添加新用户,
http://127.0.0.1:8000/user_name/Dole
。操作如图:总结
本文总结了如何通过MySQL驱动连接Python,实现了FastAPI连接MySQL数据库的示例,并结合代码结构设计了目录结构并实现获取用户和添加用户的功能,但是本文只是使用原生MySQL。 FastAPI实际上支持数据库命令,可以与SQLAlchemy结合创建更复杂的模型。以后我们会继续使用这个例子来编写用户登录和注册功能,敬请期待。
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。