FastAPI与MySQL数据库的集成

引言

在现代的网络应用开发中,数据库是一个非常重要的组成部分。数据库可以存储和管理应用程序的数据,同时提供了高效的数据查询和处理功能。FastAPI是一种现代、快速(高性能)、Web(基于标准Python类型注解)框架,旨在帮助构建高效的API。本文将介绍如何在FastAPI中集成MySQL数据库,并提供一些基本的示例代码。

安装依赖

在开始之前,我们需要安装一些依赖库。在本文中,我们将使用mysql-connector-python库来连接MySQL数据库。

pip install fastapi
pip install uvicorn
pip install mysql-connector-python

连接MySQL数据库

首先,我们需要在FastAPI应用程序中进行数据库连接的设置。以下是一个示例:

import mysql.connector

# 创建数据库连接
cnx = mysql.connector.connect(user='your_username', password='your_password',
                              host='your_host', database='your_database')

# 创建游标
cursor = cnx.cursor()

在上面的代码示例中,我们通过mysql.connector.connect()方法创建了一个数据库连接。请确保将your_usernameyour_passwordyour_hostyour_database替换为实际的值,以便正确连接到您的MySQL数据库。

创建表

接下来,我们将创建一个示例表来存储用户数据。以下是一个示例:

create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT
)
'''

# 执行创建表的SQL语句
cursor.execute(create_table_query)

# 确保更改提交到数据库
cnx.commit()

在上面的代码示例中,我们使用CREATE TABLE语句创建了一个名为users的表。这个表具有三个列:idnameageid列是一个自增的主键,name列是一个不为空的字符串,age列是一个整数类型。

插入数据

现在,我们将向表中插入一些测试数据。以下是一个示例:

insert_query = '''
INSERT INTO users (name, age) VALUES (%s, %s)
'''

# 插入一些测试数据
users = [
    ('Alice', 25),
    ('Bob', 30),
    ('Charlie', 35)
]

# 执行插入数据的SQL语句
cursor.executemany(insert_query, users)

# 确保更改提交到数据库
cnx.commit()

在上面的代码示例中,我们使用INSERT INTO语句插入了一些测试数据到users表中。我们使用executemany()方法来执行插入操作,并传递一个包含多个元组的列表作为参数。

查询数据

现在,我们将从表中查询数据。以下是一个示例:

select_query = '''
SELECT * FROM users
'''

# 执行查询数据的SQL语句
cursor.execute(select_query)

# 获取查询结果
results = cursor.fetchall()

# 打印查询结果
for row in results:
    print(f'ID: {row[0]}  Name: {row[1]}  Age: {row[2]}')

在上面的代码示例中,我们使用SELECT * FROM语句查询了users表中的所有数据。我们使用fetchall()方法获取查询结果,并使用循环遍历结果并打印出每行数据。

关闭连接

当我们完成与数据库的交互后,需要关闭数据库连接以释放资源。以下是一个示例:

# 关闭游标
cursor.close()

# 关闭连接
cnx.close()

在上面的代码示例中,我们使用close()方法关闭了游标和连接对象。

完整示例

下面是一个完整的示例,演示了如何在FastAPI中集成MySQL数据库:

from fastapi import FastAPI
import mysql.connector

app = FastAPI()

# 创建数据库连接
cnx = mysql.connector.connect(user='your_username', password='your_password',
                              host='your_host', database='your_database')

# 创建游标
cursor = cnx.cursor()

# 创建表
create_table_query = '''
CREATE TABLE IF NOT EXISTS users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    age INT