使用 FastAPI 和 MySQL 实现简单的用户信息保存功能
在构建现代 Web 应用时,后端通常需要与数据库进行交互。本文将介绍如何使用 FastAPI 框架与 MySQL 数据库结合,实现一个简单的用户信息保存功能。我们将通过 FastAPI 提供的表单数据接口,将用户提交的用户名和密码存储到 MySQL 数据库中。
环境准备
在开始之前,你需要安装以下依赖项:
FastAPI:用于构建 Web API。
pymysql:Python MySQL 数据库连接器,用于与 MySQL 进行交互。
uvicorn:用于运行 FastAPI 应用的 ASGI 服务器。
可以使用以下命令安装:
pip install fastapi pymysql uvicorn
项目结构
项目结构如下:
project/
└── main.py # FastAPI 应用
└── requirements.txt # 项目依赖
FastAPI 应用与数据库连接
我们将创建一个 FastAPI 应用,并在其中使用 PyMySQL 来连接数据库。以下是实现的关键步骤:
数据库连接配置:我们将 MySQL 的连接信息存储在一个字典中,这样便于管理数据库连接。
定义 API 路由:我们创建一个 POST 路由,允许用户通过表单提交数据,接收用户的用户名和密码并将其保存到 MySQL 数据库中。
from fastapi import FastAPI, Form
import pymysql
# 创建 FastAPI 应用实例
app = FastAPI()
# 数据库连接配置
db = {
"host": "localhost", # 数据库主机地址
"user": "xuantao", # 数据库用户名
"password": "xuantao", # 数据库密码
"db": "school", # 要连接的数据库名
"charset": "utf8mb4", # 字符编码
"cursorclass": pymysql.cursors.DictCursor # 使用字典形式的游标
}
# 定义处理 POST 请求的路由,路径为 "/main_mysql/"
@app.post("/main_mysql/")
async def save_data(username: str = Form(...), password: str = Form(...)):
"""
接收表单提交的用户名和密码,并将数据保存到数据库中。
Args:
username (str): 通过表单传递的用户名.
password (str): 通过表单传递的密码.
Returns:
dict: 返回操作结果信息,成功时返回 {"message": "success"},
发生数据库错误时返回 {"message": f"Database error: {str(e)}"},
发生其他未知错误时返回 {"message": f"Unexpected error: {str(e)}"}。
"""
conn = None # 初始化数据库连接为 None
try:
# 建立数据库连接
conn = pymysql.connect(**db)
with conn.cursor() as cursor:
# 定义 SQL 插入语句
sql = "INSERT INTO user (username, password) VALUES (%s, %s)"
# 执行 SQL 语句,并传递用户名和密码作为参数
cursor.execute(sql, (username, password))
# 提交事务,将更改保存到数据库
conn.commit()
return {"message": "成功"}
except pymysql.Error as e:
# 若数据库操作出现错误
if conn:
# 回滚事务,撤销之前的操作
conn.rollback()
return {"message": f"Database error: {str(e)}"}
except Exception as e:
# 处理其他未知异常
return {"message": f"Unexpected error: {str(e)}"}
finally:
# 确保在操作完成后关闭数据库连接
if conn and conn.open:
conn.close()
代码解析
数据库连接:pymysql.connect(**db) 用于连接到 MySQL 数据库,我们使用了一个字典存储连接的配置信息。通过 pymysql.cursors.DictCursor,我们可以将查询结果以字典的形式返回,这样便于处理。
表单数据接收:我们使用 FastAPI 的 Form 模块接收用户提交的表单数据。通过 POST 请求,username 和 password 会被接收到,并作为参数传递给 save_data 函数。
SQL 插入语句:我们使用 SQL 插入语句将用户名和密码插入到 MySQL 数据库中的 user 表。通过 cursor.execute() 执行 SQL,并通过 conn.commit() 提交事务。
错误处理:代码中使用了 try-except 语句来捕获数据库错误和其他未知错误。如果发生数据库错误,我们会回滚事务以撤销之前的操作。
启动应用
使用 Uvicorn 启动 FastAPI 应用,命令如下:
uvicorn main:app --reload
此命令会启动服务器,并在本地 http://127.0.0.1:8000 运行。你可以通过浏览器或者 API 客户端(如 Postman)向 /main_mysql/ 发送 POST 请求。