初始版本
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
# 数据库模块说明
|
||||
|
||||
本目录包含数据库相关的所有代码。
|
||||
|
||||
## 文件说明
|
||||
|
||||
- `app/models/` - 数据库模型定义(9个表)
|
||||
- `app/db/session.py` - 数据库连接和配置
|
||||
- `app/db/init_db.py` - 数据库初始化脚本
|
||||
|
||||
## 安装依赖
|
||||
|
||||
```bash
|
||||
pip install -r ../requirements.txt
|
||||
```
|
||||
|
||||
## 初始化数据库
|
||||
|
||||
### 首次创建数据库
|
||||
|
||||
运行以下命令创建数据库表:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
python -m app.db.init_db
|
||||
```
|
||||
|
||||
或者从项目根目录运行:
|
||||
|
||||
```bash
|
||||
python -m backend.app.db.init_db
|
||||
```
|
||||
|
||||
执行后会在项目根目录生成 `blogweb.db` SQLite 数据库文件。
|
||||
|
||||
### 模型更新后更新数据库
|
||||
|
||||
⚠️ **重要提示**:`create_all()` 只会创建**不存在的表**,**不会修改已存在表的结构**。
|
||||
|
||||
如果 models 有更新(添加字段、修改字段类型等),有两种方式:
|
||||
|
||||
#### 方式1:重置数据库(开发环境推荐)
|
||||
|
||||
⚠️ **会删除所有数据**,适合开发环境:
|
||||
|
||||
```bash
|
||||
python -m app.db.init_db --reset
|
||||
```
|
||||
|
||||
#### 方式2:使用数据库迁移工具(生产环境推荐)
|
||||
|
||||
对于生产环境,建议使用 **Alembic** 进行数据库迁移:
|
||||
|
||||
```bash
|
||||
# 安装 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 应用中使用数据库:
|
||||
|
||||
```python
|
||||
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
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user