使用 PyMySQL 和 FastAPI 构建 Web 应用

介绍

在本篇文章中,我将向您展示如何使用 PyMySQL 和 FastAPI 构建一个简单的 Web 应用。PyMySQL 是一个用于 Python 的纯 Python MySQL 客户端库,而 FastAPI 是一个用于构建高性能 Web API 的现代化框架。通过结合使用这两个工具,您可以轻松地连接到 MySQL 数据库并构建出一个功能强大的 Web 应用。

准备工作

在开始之前,您需要确保已经安装了 Python 和 MySQL。如果您还没有安装它们,可以从官方网站下载并按照安装指南进行安装。

同时,您需要使用 pip 工具安装 PyMySQL 和 FastAPI。在命令行中运行以下命令:

pip install pymysql fastapi

安装完成后,我们就可以开始构建我们的 Web 应用了。

步骤

下面是构建这个 Web 应用的整个流程:

journey
    :开始;
    :导入必要的模块;
    :创建数据库连接;
    :创建数据库表;
    :定义数据模型;
    :定义路由和处理函数;
    :编写 API 文档;
    :运行应用;
    :结束;

让我们逐步来完成这些步骤。

导入必要的模块

首先,我们需要导入一些必要的模块来支持我们的应用。在您的 Python 文件中,添加以下代码:

from fastapi import FastAPI
from fastapi import Response
import pymysql

在这里,我们导入了 FastAPI、Response 和 PyMySQL 模块。

创建数据库连接

接下来,我们需要创建一个数据库连接。在您的 Python 文件中,添加以下代码:

connection = pymysql.connect(
    host="localhost",
    user="your_username",
    password="your_password",
    database="your_database"
)

在这里,我们使用了 PyMySQL 提供的 connect 函数来创建一个与数据库的连接。请确保替换 your_usernameyour_passwordyour_database 分别为您的数据库的用户名、密码和数据库名称。

创建数据库表

在继续之前,我们需要在数据库中创建一个表来存储我们的数据。在您的 Python 文件中,添加以下代码:

with connection.cursor() as cursor:
    sql = """
    CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50),
        email VARCHAR(50)
    )
    """
    cursor.execute(sql)
    connection.commit()

在这里,我们使用了 cursor 对象来执行 SQL 语句。CREATE TABLE 语句用于创建一个名为 users 的表,包含 idnameemail 三个列。

定义数据模型

接下来,我们需要定义一个数据模型来表示我们的数据。在您的 Python 文件中,添加以下代码:

class User(BaseModel):
    id: int
    name: str
    email: str

在这里,我们使用了 FastAPI 的 BaseModel 类来定义一个名为 User 的数据模型。该模型包含了与我们在数据库中创建的表相对应的字段。

定义路由和处理函数

现在,我们需要定义一些路由和处理函数来处理来自客户端的请求。在您的 Python 文件中,添加以下代码:

app = FastAPI()

@app.get("/users")
def get_users():
    with connection.cursor() as cursor:
        sql = "SELECT * FROM users"
        cursor.execute(sql)
        result = cursor.fetchall()
        users = [User(id=row[0], name=row[1], email=row[2]) for row in result]
        return users

@app.post("/users")
def create_user(user: User, response: Response):
    with connection.cursor() as cursor:
        sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
        cursor.execute(sql, (user.name, user.email))
        connection.commit()
        response.status_code = 201
        return {"message": "User created successfully"}

在这里,我们使用了 FastAPI 的装饰器语法来定义了两个路由。@app.get("/users") 定义了一个 GET 请求的路由,用于获取所有用户的信息。@app.post("/users") 定义了一个 POST 请求的路由,用于创建一个