1.逆向工程核心流程
graph LR
A[现有数据库] --> B{使用sqlmodel-generate}
B --> C[生成Python模型]
C --> D[自定义模型增强]
D --> E[集成到应用]
- 支持主流数据库:MySQL/PostgreSQL/SQLite
- 自动识别表结构及关系
2.CLI工具使用
1 2 3 4
| $ sqlmodel generate \ --db-url postgresql://user:pass@localhost/mydb \ --output models.py \ --style camel_case
|
- 关键参数说明:
1 2 3
| --tables users,products --exclude audit_logs --prefix model_
|
3.配置选项示例
1 2 3 4 5 6
| [generator] db_url = mysql+pymysql://user:pass@localhost/prod_db output = app/models.py style = snake_case include = ["users", "products"]
|
| 配置项 |
可选值 |
默认值 |
| style |
camel/snake/pascal |
snake |
| relations |
one-to-many/many-to-many |
all |
| type_map |
{db_type: python_type} |
内置映射表 |
4.生成模型定制
1 2 3 4 5 6 7 8 9 10 11
| class UserBase(SQLModel): name: str = Field(max_length=50) email: str = Field(index=True)
class User(UserBase, table=True): id: int | None = Field(default=None, primary_key=True) created_at: datetime = Field( sa_column=Column(DateTime, server_default=func.now()) )
|
- 自动包含的功能:
- 字段类型映射(VARCHAR → str)
- 索引/唯一约束识别
- 外键关系推导
5.版本控制整合
1 2 3 4 5 6 7
| def upgrade(): op.create_table('users', Column('id', Integer, primary_key=True), Column('name', String(50)), Column('email', String(255), unique=True) )
|
- 支持与Alembic结合使用
- 自动检测模型与数据库差异
- 生成可审查的迁移脚本
注意:逆向工程生成的模型建议二次审查,官方文档推荐工作流见 SQLModel DB to Code