使用sqlmodel实现唯一性校验

代码:

python 复制代码
from sqlmodel import Field, Session, SQLModel, create_engine


# 声明模型
class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    # 不能为空,必须唯一
    name: str = Field(nullable=False, unique=True)
    age: int | None = None


# 创建引擎
engine = create_engine("sqlite:///database.db", echo=True)

# 创建表
SQLModel.metadata.create_all(engine)

# 创建两个名字重复的用户
zs_1 = User(name="张三", age=22)
zs_2 = User(name="张三", age=23)

with Session(engine) as session:
    session.add(zs_1)
    session.add(zs_2)

    session.commit()

这段代码执行,会触发唯一性校验异常:

如果注释掉其中一个,则正常执行:

python 复制代码
from sqlmodel import Field, Session, SQLModel, create_engine


# 声明模型
class User(SQLModel, table=True):
    id: int | None = Field(default=None, primary_key=True)
    # 不能为空,必须唯一
    name: str = Field(nullable=False, unique=True)
    age: int | None = None


# 创建引擎
engine = create_engine("sqlite:///database.db", echo=True)

# 创建表
SQLModel.metadata.create_all(engine)

# 创建两个名字重复的用户
zs_1 = User(name="张三", age=22)
# zs_2 = User(name="张三", age=23)

with Session(engine) as session:
    session.add(zs_1)
    # session.add(zs_2)

    session.commit()
相关推荐
goehou4 分钟前
流式输出实战:SSE 解析、chunk 拼装与断流重试
python·ai·llm·sse·流式
SamChan9022 分钟前
图片翻译后文字挤出边框?用 Pillow 测量译文,不再靠字符数猜宽度
图像处理·python·pillow·本地化·图片翻译
2601_9627809123 分钟前
2027风险管理岗准备路线:数学与应用数学专业如何补齐金融、SQL与Python
python·sql·金融
老唐77729 分钟前
Transformer原理大白话讲解
人工智能·python·深度学习·神经网络·计算机视觉·ai·transformer
佳木逢钺33 分钟前
从火灾模拟到系统热寂:一个双非运维如何用零 GPU 推导出多智能体系统的终极死锁
人工智能·python·算法·多智能体
fwc1 小时前
第T9周:猫狗识别2
python·深度学习
砚底藏山河1 小时前
数据新鲜度 SLA 监控
java·大数据·python·maven
Wzx1980121 小时前
Python Agent 短期记忆设计:从对话历史到 LangGraph Checkpointer
开发语言·python
ljt27249606611 小时前
Python笔记(五)--读写文件
笔记·python