You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用datamodel-code-generator生成带Table标识的SQLModel?

解决datamodel-code-generator生成带Table标识的SQLModel问题

一、用datamodel-code-generator直接适配

datamodel-code-generator本身没有原生支持生成table=True的SQLModel,但可以通过以下两种方式实现:

  • 自定义模板修改生成逻辑
    工具支持通过--template-dir指定自定义模板覆盖默认规则。你可以复制官方的Pydantic模板文件,修改类定义部分,让需要作为数据库表的模型生成SQLModel, table=True的结构:

    1. 找到工具安装目录下的templates/pydantic模板文件夹,复制相关文件到本地自定义目录
    2. 修改模板中的类生成代码,比如把原来的
      class {{ class_name }}({{ base_model }}):
      
      改成针对特定模型生成:
      class {{ class_name }}(SQLModel, table=True):
      
    3. 生成时执行命令:datamodel-codegen --input openapi.yaml --output models.py --base-model sqlmodel.SQLModel --template-dir ./your-custom-templates
  • 结合OpenAPI扩展标记表模型
    在你的OpenAPI规范里,给需要作为数据库表的Schema加个自定义扩展(比如x-is-table: true),然后修改模板时读取这个扩展字段,动态判断是否添加table=True。这样能精准控制哪些模型生成带表标识的SQLModel,避免全量修改。

二、替代方案

如果自定义模板太繁琐,试试这些更简单的方法:

  • 手动修改生成的Pydantic模型
    先正常生成Pydantic模型,再把需要作为表的模型手动改成继承SQLModel并加上table=True。比如:
    原始生成的Pydantic模型:

    class Customer(BaseModel):
        id: int
        name: str
    

    修改后:

    class Customer(SQLModel, table=True):
        id: int = Field(primary_key=True)
        name: str
    

    这种方式适合模型数量不多的场景。

  • 写脚本批量转换Pydantic到SQLModel表
    可以写个简单的Python脚本,批量把生成的Pydantic模型转换成带table=True的SQLModel。示例代码:

    from sqlmodel import SQLModel, Field
    from pydantic import BaseModel
    
    def convert_to_sql_table(pydantic_cls, pk_field="id"):
        # 复制字段注解和属性
        new_cls_attrs = {"__annotations__": pydantic_cls.__annotations__}
        # 处理主键字段
        for field_name, field in pydantic_cls.__fields__.items():
            if field_name == pk_field:
                new_cls_attrs[field_name] = Field(primary_key=True, default=field.default)
            else:
                new_cls_attrs[field_name] = field.default
        # 设置table=True
        new_cls_attrs["table"] = True
        # 创建新的SQLModel类
        return type(pydantic_cls.__name__, (SQLModel,), new_cls_attrs)
    
    # 使用示例:假设生成的模型在generated_models模块里
    from generated_models import Customer as PydanticCustomer
    CustomerTable = convert_to_sql_table(PydanticCustomer)
    
  • 换用支持SQLModel的生成工具
    可以试试sqlmodel-codegen(虽然目前主要用于从数据库反向生成,但后续可能支持OpenAPI),或者找openapi-codegen的社区维护分支,部分分支支持直接生成SQLModel。

内容的提问来源于stack exchange,提问作者Siddharth Ram

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 08:52:17