Python Web 开发:FastAPI 与数据库操作及 ORM 实践

Python Web 开发:FastAPI 与数据库操作及 ORM 实践

目录

  1. 🗂 数据库操作与 ORM 概述
  2. 🛠 常见数据库类型:SQL 与 NoSQL
  3. 🧩 数据库模型设计与迁移
  4. 💾 FastAPI 与 SQLAlchemy 集成
  5. 🧰 FastAPI ORM 迁移工具:Alembic 使用指南

1. 🗂 数据库操作与 ORM 概述

数据库是大多数 Web 应用程序的核心组成部分。无论是处理用户数据、商品信息,还是存储应用的其他业务数据,数据库都是存储和管理这些信息的关键工具。对于现代 Web 应用来说,数据库操作的实现往往需要通过对象关系映射(ORM)来简化,ORM 的出现使得开发者能够使用 Python 对象与数据库表进行交互,避免了繁琐的 SQL 语句编写。FastAPI 是一个轻量级但功能强大的 Web 框架,能够很好地与多种数据库进行集成,通过 ORM 库简化数据库操作。

在 FastAPI 中,最常用的 ORM 库是 SQLAlchemy。SQLAlchemy 提供了完整的数据库抽象层,不仅支持关系型数据库(SQL),还支持一些轻量级的 NoSQL 数据库。通过 SQLAlchemy,开发者可以方便地创建、更新、删除以及查询数据库中的数据,无需手动编写 SQL 语句。通过结合 FastAPI 的依赖注入系统,ORM 操作可以被轻松集成到应用中,保持代码的简洁和高效。

数据库操作包括两个主要部分:数据库连接数据库操作。数据库连接管理负责与数据库建立连接并维护会话,而数据库操作则涉及到增、删、改、查等常见的数据操作。使用 ORM 进行数据库操作时,开发者通过定义 Python 类来映射数据库表,并使用 ORM 提供的 API 进行数据的存取。通过这种方式,开发者可以专注于业务逻辑的实现,而不需要关心低层次的数据库操作细节。


2. 🛠 常见数据库类型:SQL 与 NoSQL

在现代 Web 开发中,开发者常常面临选择数据库类型的问题。大体上,数据库可以分为两类:SQL(关系型数据库)NoSQL(非关系型数据库)。每种类型的数据库都有其独特的特点,适用于不同的应用场景。理解它们的区别、优缺点以及如何在 FastAPI 中使用它们,是开发高效、可扩展 Web 应用的关键。

SQL(关系型数据库)

关系型数据库(SQL)基于结构化查询语言(SQL)进行操作,最常见的 SQL 数据库包括 MySQL、PostgreSQL 和 SQLite。关系型数据库通过表格来存储数据,数据表通过字段(columns)来定义数据的结构,每个表有一个唯一的主键(primary key)来标识每行数据。关系型数据库的核心优势在于其强大的数据一致性和复杂查询能力。

例如,使用 SQLAlchemy 和 FastAPI 构建与 SQL 数据库交互的应用时,可以通过定义 Python 类来映射数据库中的表结构。以下是一个简单的 SQLAlchemy 数据模型:

python 复制代码
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker

DATABASE_URL = "sqlite:///./test.db"  # SQLite 数据库

Base = declarative_base()

class Item(Base):
    __tablename__ = "items"

    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    description = Column(String, index=True)

# 创建数据库引擎
engine = create_engine(DATABASE_URL)

# 创建数据库表
Base.metadata.create_all(bind=engine)
NoSQL(非关系型数据库)

与关系型数据库不同,非关系型数据库(NoSQL)不使用表格来存储数据,而是采用其他数据模型,如文档、键值对、图结构等。NoSQL 数据库在扩展性和性能方面表现出色,尤其适用于需要处理大规模、高并发、灵活结构化数据的应用。常见的 NoSQL 数据库包括 MongoDB、Redis 和 Cassandra。

在 FastAPI 中,虽然 SQLAlchemy 是默认推荐的 ORM 工具,但通过 Pydantic 和其他库,FastAPI 同样能够与 NoSQL 数据库进行良好的集成。例如,使用 motor 库可以与 MongoDB 进行交互:

python 复制代码
from motor.motor_asyncio import AsyncIOMotorClient
from fastapi import FastAPI

app = FastAPI()

@app.on_event("startup")
async def startup_db():
    app.mongodb_client = AsyncIOMotorClient("mongodb://localhost:27017")
    app.db = app.mongodb_client.mydatabase

@app.on_event("shutdown")
async def shutdown_db():
    app.mongodb_client.close()

通过这种方式,开发者可以轻松将 MongoDB 集成到 FastAPI 应用中,并利用 MongoDB 提供的文档模型进行数据存储和查询。


3. 🧩 数据库模型设计与迁移

数据库模型设计是构建健壮 Web 应用的基础。良好的数据库模型不仅能满足业务需求,还能确保系统的可扩展性、性能和可维护性。数据库模型设计的核心在于定义数据表、字段、关系以及表之间的约束。在实际应用中,设计模型时要充分考虑数据的存储、查询效率、数据一致性等因素。

在 FastAPI 中,通过 SQLAlchemy ORM 进行数据库建模时,开发者需要定义 Python 类来表示数据模型。每个类映射到数据库中的一张表,类的属性对应表的字段。举个例子,下面是一个简单的数据库模型:

python 复制代码
from sqlalchemy import create_engine, Column, Integer, String, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)

class Item(Base):
    __tablename__ = "items"
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    user_id = Column(Integer, ForeignKey("users.id"))

    owner = relationship("User", back_populates="items")

User.items = relationship("Item", back_populates="owner")

在这个例子中,我们定义了两个模型 UserItem,其中 Item 表示一个商品,而 User 表示一个用户。Item 表与 User 表之间有一个外键关系,表明每个商品属于一个用户。通过定义 relationship,我们可以方便地在查询时实现联表查询,避免手动编写复杂的 SQL 语句。

数据库迁移

随着应用的不断发展,数据库的结构往往会发生变化。为了使数据库模型能够顺利过渡到新的版本,通常需要使用数据库迁移工具。对于 FastAPI 应用,Alembic 是常用的数据库迁移工具,它能够帮助开发者跟踪数据库模型的变化,并自动生成迁移脚本。

下面是使用 Alembic 进行数据库迁移的简要步骤:

  1. 安装 Alembic

    通过 pip 安装 Alembic:

    bash 复制代码
    pip install alembic
  2. 初始化 Alembic

    在 FastAPI 项目根目录下,运行以下命令初始化 Alembic:

    bash 复制代码
    alembic init alembic
  3. 配置 Alembic

    alembic.ini 配置文件中,设置数据库连接字符串:

    ini 复制代码
    sqlalchemy.url = sqlite:///./test.db
  4. 生成迁移脚本

    每当数据库模型发生变化时,运行以下命令自动生成迁移脚本:

    bash 复制代码
    alembic revision --autogenerate -m "create items table"
  5. 应用迁移

    使用以下命令将迁移脚本应用到数据库:

    bash 复制代码
    alembic upgrade head

通过 Alembic,开发者能够高效地管理数据库的变更,避免了手动编写数据库迁移脚本的繁琐。


相关推荐
还是鼠鼠2 分钟前
SQL语句执行很慢,如何分析呢?
java·数据库·mysql·面试
油丶酸萝卜别吃7 分钟前
修改chrome配置,关闭跨域校验
前端·chrome
czlczl200209258 分钟前
如何添加“默认给Sql查询语句加上租户条件”的功能
数据库·python·sql
破烂pan8 分钟前
Python 长连接实现方式全景解析
python·websocket·sse
高洁0110 分钟前
一文了解图神经网络
人工智能·python·深度学习·机器学习·transformer
用户35218024547510 分钟前
🚀 Milvus 实战部署全记录
数据库·docker·ai编程
咸鱼加辣13 分钟前
按“最近是否用过”删(LRU)
python
l1t14 分钟前
PostgreSQL pg_clickhouse插件的安装和使用
数据库·clickhouse·postgresql·插件
m0_7400437322 分钟前
3、Vuex-Axios-Element UI
前端·javascript·vue.js