如何在SQLModel中配置自增标识列并实现插入操作?
解决SQLModel中MS SQL Server自增标识列的配置问题
问题根源
你的代码存在两个关键问题:
- 模型的
__tablename__与数据库实际表名不匹配(数据库表是RelatedWord,模型写的是RelatedWords) - 未正确配置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
相关产品推荐
相关产品推荐

