database-seedinglisted
Install: claude install-skill afine907/skills
# Database Seeding — 数据库填充技能
设计和实现数据库种子数据,支持开发、测试、演示环境。
## Goal
设计和实现数据库种子数据(Seed Data),包含测试数据生成、数据工厂、环境初始化、数据快照
## Trigger
- 用户要求"生成测试数据"、"数据填充"、"数据库初始化"
- 开发环境需要模拟数据
- 演示环境需要展示数据
## 填充策略
| 策略 | 适用场景 | 特点 |
|------|----------|------|
| 固定数据 | 基础配置、字典表 | 不变、可预测 |
| 随机数据 | 测试、开发 | 大量、多样 |
| 真实数据 | 演示、验收 | 接近生产 |
| 快照恢复 | 测试隔离 | 快速重置 |
## Python + Faker 实现
### 数据工厂
```python
import factory
from faker import Faker
from datetime import datetime, timedelta
import random
fake = Faker('zh_CN')
class UserFactory(factory.Factory):
class Meta:
model = dict
id = factory.Sequence(lambda n: n + 1)
name = factory.LazyFunction(fake.name)
email = factory.LazyFunction(fake.email)
phone = factory.LazyFunction(fake.phone_number)
avatar = factory.LazyFunction(fake.image_url)
role = factory.LazyFunction(lambda: random.choice(['admin', 'user', 'guest']))
status = factory.LazyFunction(lambda: random.choice(['active', 'inactive']))
created_at = factory.LazyFunction(lambda: fake.date_time_between(start_date='-1y'))
class OrderFactory(factory.Factory):
class Meta:
model = dict
id = factory.Sequence(lambda n: n + 1)
user_id = factory.LazyFunction(lambda: random.randint(1, 100))
product = factory.LazyFunction(lambda: random.choice(['商品A', '商品B', '商品C']))
amount = factory.LazyFunction(lambda: round(random.uniform(10, 1000), 2))
status = factory.L