fastapi-demo/DATABASE_SETUP.md

200 lines
4.6 KiB
Markdown
Raw Permalink Normal View History

# 数据库设置指南
本项目已配置支持MySQL数据库包含完整的数据库模型、迁移脚本和管理工具。
## 目录结构
```
sql/
├── migrations/ # 数据库迁移文件
│ └── 001_create_tables.sql
├── seeds/ # 种子数据文件
│ └── sample_data.sql
└── schemas/ # 数据库架构文件
└── init_database.sql
alembic/ # Alembic迁移工具
├── versions/ # 自动生成的迁移版本
├── env.py # Alembic环境配置
└── script.py.mako # 迁移模板
app/database/ # 数据库相关代码
├── __init__.py
├── connection.py # 数据库连接管理
├── base.py # 基础模型类
└── models.py # SQLAlchemy模型
```
## 快速开始
### 1. 安装依赖
```bash
pip install -r requirements.txt
```
### 2. 配置数据库
创建 `.env.dev` 文件(参考 `.env.example`
```env
# MySQL 数据库配置
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=your_password
DB_NAME=fastapi_demo
DB_CHARSET=utf8mb4
```
### 3. 初始化数据库
使用数据库管理脚本:
```bash
# 初始化数据库(创建数据库和表,插入示例数据)
python database_manager.py init
# 或者分步执行
python database_manager.py create-db # 创建数据库
python database_manager.py create-tables # 创建表
python database_manager.py seed # 插入示例数据
```
### 4. 启动应用
```bash
python main.py
```
## 数据库管理
### 使用数据库管理脚本
```bash
python database_manager.py init # 初始化数据库
python database_manager.py reset # 重置数据库
python database_manager.py create-db # 仅创建数据库
python database_manager.py create-tables # 仅创建表
python database_manager.py seed # 仅插入示例数据
python database_manager.py help # 显示帮助
```
### 使用Alembic进行迁移
```bash
# 初始化Alembic首次使用
alembic init alembic
# 创建新的迁移
alembic revision --autogenerate -m "描述信息"
# 执行迁移
alembic upgrade head
# 回滚迁移
alembic downgrade -1
# 查看迁移历史
alembic history
# 查看当前版本
alembic current
```
## 数据库模型
### 用户表 (users)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int(11) | 主键,自增 |
| username | varchar(50) | 用户名,唯一 |
| email | varchar(100) | 邮箱,唯一 |
| full_name | varchar(100) | 全名,可空 |
| is_active | tinyint(1) | 是否激活 |
| created_at | datetime | 创建时间 |
| updated_at | datetime | 更新时间 |
### 产品表 (products)
| 字段 | 类型 | 说明 |
|------|------|------|
| id | int(11) | 主键,自增 |
| name | varchar(200) | 产品名称 |
| description | text | 产品描述,可空 |
| price | decimal(10,2) | 价格 |
| stock | int(11) | 库存数量 |
| is_available | tinyint(1) | 是否可用 |
| created_at | datetime | 创建时间 |
| updated_at | datetime | 更新时间 |
## 配置说明
### 数据库连接配置
`app/core/config.py` 中配置:
```python
# MySQL 数据库配置
DB_HOST: str = "localhost" # 数据库主机
DB_PORT: int = 3306 # 数据库端口
DB_USER: str = "root" # 数据库用户名
DB_PASSWORD: str = "" # 数据库密码
DB_NAME: str = "fastapi_demo" # 数据库名称
DB_CHARSET: str = "utf8mb4" # 字符集
# 数据库连接池配置
DB_POOL_SIZE: int = 5 # 连接池大小
DB_MAX_OVERFLOW: int = 10 # 最大溢出连接数
DB_POOL_TIMEOUT: int = 30 # 连接超时时间(秒)
DB_POOL_RECYCLE: int = 3600 # 连接回收时间(秒)
```
### 环境变量
支持通过环境变量覆盖配置:
```bash
export DB_HOST=localhost
export DB_PORT=3306
export DB_USER=root
export DB_PASSWORD=your_password
export DB_NAME=fastapi_demo
```
## 故障排除
### 常见问题
1. **连接失败**
- 检查MySQL服务是否启动
- 验证数据库配置信息
- 确认用户权限
2. **字符编码问题**
- 确保数据库使用utf8mb4字符集
- 检查连接字符串中的charset参数
3. **迁移失败**
- 检查Alembic配置
- 确认数据库连接正常
- 查看迁移文件语法
### 日志调试
启用SQL日志
```env
DB_ECHO=true
LOG_LEVEL=debug
```
## 开发建议
1. **使用迁移管理数据库结构变更**
2. **在开发环境中使用示例数据**
3. **定期备份生产数据库**
4. **使用连接池优化性能**
5. **监控数据库连接状态**