您现在的位置是:首页>编程开发 网站首页编程开发
fastAPI+mySQL小规模项目结构
- 编程开发
- 2026-01-07
- 90已阅读
- 0
简介 fastAPI+mySQL小规模项目结构
适合小规模项目、基于 FastAPI + MySQL 的清晰、可扩展但不复杂的项目结构,这是我在实际项目中比较常用的一种 👍
(适合:后台接口、管理系统、轻量业务服务)
一、推荐技术栈
- FastAPI:Web 框架
- MySQL:数据库
- SQLAlchemy 2.x(推荐)或 1.4
- Pydantic:数据校验
- Uvicorn:ASGI 服务器
- python-dotenv:环境变量
二、小规模项目目录结构(推荐)
project_name/
│
├── app/
│ ├── main.py # FastAPI 入口
│ │
│ ├── core/ # 核心配置
│ │ ├── config.py # 配置(数据库、环境变量)
│ │ └── database.py # 数据库连接
│ │
│ ├── models/ # SQLAlchemy ORM 模型
│ │ └── user.py
│ │
│ ├── schemas/ # Pydantic 模型
│ │ └── user.py
│ │
│ ├── crud/ # 数据库操作(可选但推荐)
│ │ └── user.py
│ │
│ ├── api/ # 路由
│ │ ├── deps.py # 依赖(DB Session 等)
│ │ └── v1/
│ │ └── user.py
│ │
│ └── __init__.py
│
├── .env # 环境变量
├── requirements.txt
└── README.md
👉 这个结构的优点
- 不复杂(小项目够用)
- 后期可平滑扩展为中大型项目
- 清晰分层:API / CRUD / Model / Schema
三、关键代码示例
1️⃣ 数据库配置(MySQL)
app/core/config.py
from pydantic import BaseSettings
class Settings(BaseSettings):
DATABASE_URL: str
class Config:
env_file = ".env"
settings = Settings()
.env
DATABASE_URL=mysql+pymysql://user:[email protected]:3306/test_db
2️⃣ 数据库连接
app/core/database.py
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker, DeclarativeBase
from app.core.config import settings
engine = create_engine(
settings.DATABASE_URL,
pool_pre_ping=True,
echo=True
)
SessionLocal = sessionmaker(
autocommit=False,
autoflush=False,
bind=engine
)
class Base(DeclarativeBase):
pass
3️⃣ ORM 模型
app/models/user.py
from sqlalchemy import Integer, String
from sqlalchemy.orm import Mapped, mapped_column
from app.core.database import Base
class User(Base):
__tablename__ = "users"
id: Mapped[int] = mapped_column(Integer, primary_key=True)
username: Mapped[str] = mapped_column(String(50), unique=True)
email: Mapped[str] = mapped_column(String(100))
4️⃣ Pydantic Schema
app/schemas/user.py
from pydantic import BaseModel
class UserCreate(BaseModel):
username: str
email: str
class UserOut(BaseModel):
id: int
username: str
email: str
class Config:
from_attributes = True
5️⃣ CRUD 操作
app/crud/user.py
from sqlalchemy.orm import Session
from app.models.user import User
from app.schemas.user import UserCreate
def create_user(db: Session, user: UserCreate):
db_user = User(**user.model_dump())
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
6️⃣ 依赖注入(DB Session)
app/api/deps.py
from app.core.database import SessionLocal
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
7️⃣ 路由
app/api/v1/user.py
from fastapi import APIRouter, Depends
from sqlalchemy.orm import Session
from app.api.deps import get_db
from app.schemas.user import UserCreate, UserOut
from app.crud.user import create_user
router = APIRouter(prefix="/users", tags=["users"])
@router.post("/", response_model=UserOut)
def create(user: UserCreate, db: Session = Depends(get_db)):
return create_user(db, user)
8️⃣ FastAPI 入口
app/main.py
from fastapi import FastAPI
from app.api.v1.user import router as user_router
app = FastAPI(title="FastAPI MySQL Demo")
app.include_router(user_router)
四、启动方式
pip install -r requirements.txt
uvicorn app.main:app --reload
访问:
- Swagger:http://127.0.0.1:8000/docs
五、适合的场景总结
✅ 非常适合小规模项目
✅ MySQL + FastAPI 主流组合
✅ 代码不臃肿
✅ 后期可扩展(加 auth、celery、redis 都不冲突)
下一篇:无
