FastAPI 教程

9.4 数据库迁移:Alembic 配置与使用

Python初学者FastAPI入门教程:Alembic数据库迁移配置与使用详解

FastAPI 教程

面向Python初学者的FastAPI入门教程,包含Alembic配置和使用。通过生活化类比和动手实践,快速掌握数据库迁移,建立Web开发信心。适合有基础Python语法、无Web开发经验的用户。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Python初学者FastAPI入门教程:Alembic配置与使用

简介

欢迎来到FastAPI入门教程!如果你是Python初学者,有基础语法知识但没有Web开发经验,那你就来对地方了。今天,我们将一起学习如何用FastAPI创建一个简单的Web应用,并引入Alembic来管理数据库迁移。不用担心复杂理论,我会用生活化类比帮你轻松理解,并通过大量简单示例让你快速体验成功时刻。想象一下:FastAPI就像是一个超级快递员,能快速将你的API代码交付给用户;数据库像一个仓库,存储你的数据;而Alembic则像是仓库管理员,负责更新仓库的布局,确保数据整齐有序。准备好了吗?让我们开始吧!

前置条件

  • 确保你安装了Python 3.7或更高版本。如果没有,去Python官网下载并安装。
  • 熟悉基础Python语法,比如变量、函数和导入模块。

第一步:安装FastAPI和相关工具

首先,我们需要安装必要的工具。打开终端或命令提示符,运行以下命令来安装FastAPI、SQLAlchemy、Alembic和一个ASGI服务器(如Uvicorn):

pip install fastapi uvicorn sqlalchemy alembic

这就像是为你的项目准备工具包——快递员(FastAPI)、服务器(Uvicorn)、仓库(SQLAlchemy)和管理员(Alembic)都齐了。成功安装后,你会看到类似“Successfully installed”的消息,这是你的第一个成功时刻!

第二步:创建第一个FastAPI应用

现在,让我们创建一个简单的FastAPI应用,体验一下“Hello World”的乐趣。在项目中创建一个新文件 main.py,并输入以下代码:

from fastapi import FastAPI

app = FastAPI()  # 初始化FastAPI应用,就像启动快递员

@app.get("/")  # 定义一个GET路由,当访问根路径时触发
def read_root():
    return {"Hello": "World"}  # 返回一个JSON响应

保存文件后,在终端运行:

uvicorn main:app --reload

打开浏览器,访问 http://127.0.0.1:8000,你会看到 {"Hello": "World"} 显示在页面上。恭喜你!你已经成功运行了第一个FastAPI应用——快递员正在工作,快速送达了你的消息!

第三步:引入数据库和Alembic

在Web开发中,我们经常需要存储数据,比如用户信息或博客文章。这就是数据库的用武之地——想象它是一个仓库,存放你的物品(数据)。但仓库布局可能需要更新,比如添加新货架。Alembic就是你的仓库管理员,负责这些更新。

首先,我们需要设置数据库模型。创建一个新文件 models.py,定义简单的用户模型:

from sqlalchemy import Column, Integer, String
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)
    email = Column(String, unique=True, index=True)

这就像是在仓库里规划了一个“用户”区域,有ID、姓名和邮箱三个货架。

第四步:配置Alembic

现在,我们来配置Alembic,让它管理数据库迁移。在终端中,运行以下命令初始化Alembic:

alembic init alembic

这会创建一个 alembic 文件夹和 alembic.ini 配置文件。打开 alembic.ini 文件,找到 sqlalchemy.url 行,修改为你的数据库URL。对于初学者,我们可以使用SQLite数据库,它像一个本地文件仓库:

sqlalchemy.url = sqlite:///./test.db

然后,在 alembic/env.py 文件中,导入你的模型并设置 target_metadata。修改文件,添加以下代码:

from models import Base
target_metadata = Base.metadata  # 告诉Alembic跟踪这些模型

保存文件后,运行 alembic current 检查配置,如果看到“No current revision”之类信息,说明配置成功——管理员已经就位!

第五步:使用Alembic进行迁移

迁移就像仓库管理员根据规划更新仓库。首先,我们需要创建迁移脚本。在终端运行:

alembic revision --autogenerate -m "Create users table"

这会生成一个迁移文件在 alembic/versions/ 文件夹中。打开它,你会看到SQL语句,比如创建 users 表。现在,应用这个迁移来更新数据库:

alembic upgrade head

运行后,数据库会被创建或更新,你可以在项目目录中看到 test.db 文件。成功!管理员已经执行了更新,仓库现在有了新货架。

第六步:集成到FastAPI,创建一个简单API

现在,让我们把数据库和FastAPI结合起来,创建一个可以添加和查看用户的API。修改 main.py 文件:

from fastapi import FastAPI, HTTPException
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from models import Base, User

# 创建数据库引擎和会话,就像打开仓库门
DATABASE_URL = "sqlite:///./test.db"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

# 确保数据库表存在
Base.metadata.create_all(bind=engine)

app = FastAPI()

@app.post("/users/")  # 定义一个POST路由来添加用户
def create_user(name: str, email: str):
    db = SessionLocal()
    new_user = User(name=name, email=email)
    db.add(new_user)  # 将新用户添加到仓库
    db.commit()  # 确认更新
    db.refresh(new_user)
    return new_user  # 返回创建的用户

@app.get("/users/{user_id}")  # 定义一个GET路由来查看用户
def read_user(user_id: int):
    db = SessionLocal()
    user = db.query(User).filter(User.id == user_id).first()
    if user is None:
        raise HTTPException(status_code=404, detail="User not found")
    return user

保存文件后,重新运行 uvicorn main:app --reload。现在,你可以使用工具如curl或浏览器扩展测试API。例如,发送一个POST请求到 http://127.0.0.1:8000/users/?name=John&email=john@example.com,然后GET请求到 http://127.0.0.1:8000/users/1 来查看用户。成功时刻!你已经创建了一个能存储和检索数据的Web API。

第七步:更多迁移示例

为了巩固知识,让我们添加一个迁移来更新模型。假设我们想给用户添加年龄字段。首先,更新 models.py

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True, index=True)
    name = Column(String, index=True)
    email = Column(String, unique=True, index=True)
    age = Column(Integer, nullable=True)  # 新增年龄字段

然后,生成和应用迁移:

alembic revision --autogenerate -m "Add age field to users"
alembic upgrade head

现在,数据库已经更新,你可以修改API来使用新字段。这展示了Alembic的强大——轻松管理仓库变化!

总结

恭喜你完成了这个FastAPI和Alembic入门教程!你学会了:

  • 安装和运行FastAPI应用,体验了“Hello World”成功。
  • 配置Alembic来管理数据库迁移,用生活化类比理解概念。
  • 创建了简单API,集成数据库操作。 通过动手实践,你已经建立了Web开发的信心。记住,FastAPI让API开发快速,Alembic让数据库变更安全。接下来,你可以尝试添加更多功能,比如身份验证或复杂查询。继续探索,享受编程的乐趣!

如果有问题,参考FastAPI官方文档Alembic文档。祝你学习愉快!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包