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

如何在SQLModel中配置自增标识列并实现插入操作?

解决SQLModel中MS SQL Server自增标识列的配置问题

问题根源

你的代码存在两个关键问题:

  1. 模型的__tablename__与数据库实际表名不匹配(数据库表是RelatedWord,模型写的是RelatedWords)
  2. 未正确配置SQL Server专属的IDENTITY列属性,导致SQLAlchemy无法识别这是数据库自动生成的主键值

正确配置方案

修正后的模型类如下:

from sqlmodel import SQLModel, Field, Session
from sqlalchemy import Column, Integer, Identity

class RelatedWord(SQLModel, table=True):
    __tablename__ = "RelatedWord"  # 与数据库表名保持一致
    __table_args__ = {"schema": "rlt"}  # 用__table_args__指定架构更符合SQLModel规范
    
    id: int | None = Field(
        default=None,
        sa_column=Column(
            "Id",  # 映射数据库的Id列名
            Integer,
            primary_key=True,
            autoincrement=True,
            server_default=Identity()  # 明确指定SQL Server的IDENTITY属性
        )
    )

验证代码

使用原有的插入逻辑即可正常工作:

new_rw = RelatedWord()

with Session(db_engine) as session:
    session.add(new_rw)
    session.commit()
    session.refresh(new_rw)  # 可选,手动刷新获取最新生成的id
    print(new_rw.id)  # 输出数据库自动生成的主键值

关键说明

  • server_default=Identity()是适配SQL ServerIDENTITY列的核心配置,告诉SQLAlchemy该列的值由数据库自动生成
  • autoincrement=True与int | None类型兼容,因为创建对象时id设为None,提交后会被数据库赋值
  • 用__table_args__指定schema比直接设置metadata更简洁,也符合SQLModel的最佳实践

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:43:11