FastAPI + SQLAlchemy + MySQL 项目教程
1. 项目的目录结构及介绍
fastapi_sqlalchemy_mysql/
├── alembic/
│ ├── versions/
│ │ └── ...
│ ├── env.py
│ ├── script.py.mako
├── app/
│ ├── models/
│ │ └── user.py
│ ├── routes/
│ │ └── user.py
│ ├── schemas/
│ │ └── user.py
│ ├── __init__.py
│ ├── config.py
│ ├── database.py
│ ├── main.py
│ └── dependencies.py
├── alembic.ini
├── requirements.txt
└── README.md
目录结构介绍
- alembic/: 数据库迁移文件夹,包含数据库版本控制的相关文件。
- versions/: 存放具体的数据库迁移脚本。
- env.py: Alembic 环境配置文件。
- script.py.mako: Alembic 脚本模板。
- app/: 应用主目录,包含所有应用相关的代码。
- models/: 数据库模型文件夹。
- routes/: API 路由文件夹。
- schemas/: Pydantic 模型文件夹,用于数据验证和序列化。
- init.py: 使
app
目录成为一个 Python 包。 - config.py: 应用配置文件。
- database.py: 数据库连接和会话管理。
- main.py: 应用入口文件。
- dependencies.py: 依赖注入管理。
- alembic.ini: Alembic 配置文件。
- requirements.txt: 项目依赖文件。
- README.md: 项目说明文档。
2. 项目的启动文件介绍
main.py
from fastapi import FastAPI
from app.database import engine, Base
from app.routes import user
Base.metadata.create_all(bind=engine)
app = FastAPI()
app.include_router(user.router)
@app.get("/")
def read_root():
return {"message": "Hello World"}
启动文件介绍
- main.py: 这是项目的入口文件,负责初始化 FastAPI 应用并包含路由。
Base.metadata.create_all(bind=engine)
: 创建所有定义的数据库表。app = FastAPI()
: 初始化 FastAPI 应用。app.include_router(user.router)
: 包含用户路由。@app.get("/")
: 定义根路径的 GET 请求处理函数。
3. 项目的配置文件介绍
config.py
from pydantic import BaseSettings
class Settings(BaseSettings):
DATABASE_URL: str
settings = Settings()
配置文件介绍
- config.py: 应用配置文件,使用 Pydantic 的
BaseSettings
类来管理配置。Settings
: 定义了一个配置类,包含DATABASE_URL
属性。settings = Settings()
: 实例化配置对象,读取环境变量或默认配置。
database.py
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from app.config import settings
SQLALCHEMY_DATABASE_URL = settings.DATABASE_URL
engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
Base = declarative_base()
数据库配置介绍
- database.py: 数据库连接和会话管理。
SQLALCHEMY_DATABASE_URL
: 数据库连接 URL,从配置文件中读取。engine
: SQLAlchemy 引擎,用于数据库连接。SessionLocal
: 会话工厂,用于创建数据库会话。Base
: 用于声明数据库模型的基类。
通过以上介绍,您可以更好地理解和使用 FastAPI + SQLAlchemy + MySQL 项目