Files
2025-12-26 13:42:22 +08:00

2.1 KiB
Raw Permalink Blame History

数据库模块说明

本目录包含数据库相关的所有代码。

文件说明

  • app/models/ - 数据库模型定义(9个表)
  • app/db/session.py - 数据库连接和配置
  • app/db/init_db.py - 数据库初始化脚本

安装依赖

pip install -r ../requirements.txt

初始化数据库

首次创建数据库

运行以下命令创建数据库表:

cd backend
python -m app.db.init_db

或者从项目根目录运行:

python -m backend.app.db.init_db

执行后会在项目根目录生成 blogweb.db SQLite 数据库文件。

模型更新后更新数据库

⚠️ 重要提示create_all() 只会创建不存在的表不会修改已存在表的结构

如果 models 有更新(添加字段、修改字段类型等),有两种方式:

方式1:重置数据库(开发环境推荐)

⚠️ 会删除所有数据,适合开发环境:

python -m app.db.init_db --reset

方式2:使用数据库迁移工具(生产环境推荐)

对于生产环境,建议使用 Alembic 进行数据库迁移:

# 安装 Alembic
pip install alembic

# 初始化迁移环境
alembic init alembic

# 生成迁移脚本
alembic revision --autogenerate -m "描述变更"

# 执行迁移
alembic upgrade head

数据库表结构

根据 数据库设计说明.md 创建了以下9个表:

  1. users - 用户账户信息
  2. todos - 待办事项列表
  3. posts - 博客文章
  4. transactions - 个人记账记录
  5. media - 书影音收藏条目
  6. tags - 媒体标签
  7. media_tags - 媒体与标签的多对多关联表
  8. chat_messages - 聊天室消息记录
  9. uploads - 用户上传的文件元数据

使用示例

在 FastAPI 应用中使用数据库:

from app.db.session import get_db
from app.models import User, Todo
from sqlmodel import Session, select

# 在路由中使用
@app.get("/users")
def get_users(session: Session = Depends(get_db)):
    statement = select(User)
    users = session.exec(statement).all()
    return users