使用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()
相关推荐
阔皮大师18 分钟前
INote轻量文本编辑器
java·javascript·python·c#
小法师爱分享22 分钟前
StickyNotes,简单便签超实用
java·python
深蓝电商API22 分钟前
处理字体反爬:woff字体文件解析实战
爬虫·python
开源技术24 分钟前
Claude Opus 4.6 发布,100万上下文窗口,越贵越好用
人工智能·python
张3蜂36 分钟前
深入理解 Python 的 frozenset:为什么要有“不可变集合”?
前端·python·spring
皮卡丘不断更1 小时前
手搓本地 RAG:我用 Python 和 Spring Boot 给 AI 装上了“实时代码监控”
人工智能·spring boot·python·ai编程
爱打代码的小林1 小时前
基于 MediaPipe 实现实时面部关键点检测
python·opencv·计算机视觉
极客小云1 小时前
【ComfyUI API 自动化利器:comfyui_xy Python 库使用详解】
网络·python·自动化·comfyui
闲人编程2 小时前
Elasticsearch搜索引擎集成指南
python·elasticsearch·搜索引擎·jenkins·索引·副本·分片
痴儿哈哈2 小时前
自动化机器学习(AutoML)库TPOT使用指南
jvm·数据库·python