如何使用SQLModel为多列定义UniqueConstraint约束?
在SQLModel中实现多列组合唯一约束
SQLModel完全兼容SQLAlchemy的UniqueConstraint用法,要实现指定user_id下name的唯一性,最惯用的方式是通过模型的__table_args__属性声明表级组合唯一约束。
修改后的完整代码示例:
from sqlmodel import SQLModel, Field, UniqueConstraint class SubAccount(SQLModel, table=True): id: int = Field(primary_key=True) name: str description: str user_id: int = Field(foreign_key="user.id") __table_args__ = ( UniqueConstraint("user_id", "name", name="subaccount_user_id_name_unique"), )
关键说明:
__table_args__是SQLModel继承自SQLAlchemy的表级配置属性,专门用来定义表层面的约束、索引等UniqueConstraint的参数里依次传入需要组合的列名(user_id和name),数据库会强制保证这两列的组合值唯一- 最后的
name参数是给约束自定义名称,可选但推荐添加,方便后续排查约束冲突或维护数据库结构 - 模型必须加上
table=True参数,否则SQLModel不会将其映射为数据库表,约束也不会生效
这样配置后,当尝试插入同一user_id下重复name的记录时,数据库会直接抛出唯一性约束冲突的异常,从底层保证数据的一致性。
内容的提问来源于stack exchange,提问作者Jundiaius
相关产品推荐
相关产品推荐

