使用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()
相关推荐
幻云20108 小时前
Python深度学习:从筑基到登仙
前端·javascript·vue.js·人工智能·python
仰望星空@脚踏实地9 小时前
本地Python脚本是否存在命令注入风险
python·datakit·命令注入
LOnghas12119 小时前
果园环境中道路与树木结构检测的YOLO11-Faster语义分割方法
python
2501_9445264211 小时前
Flutter for OpenHarmony 万能游戏库App实战 - 蜘蛛纸牌游戏实现
android·java·python·flutter·游戏
飞Link12 小时前
【Django】Django的静态文件相关配置与操作
后端·python·django
Ulyanov12 小时前
从桌面到云端:构建Web三维战场指挥系统
开发语言·前端·python·tkinter·pyvista·gui开发
CCPC不拿奖不改名13 小时前
两种完整的 Git 分支协作流程
大数据·人工智能·git·python·elasticsearch·搜索引擎·自然语言处理
a努力。13 小时前
字节Java面试被问:TCP的BBR拥塞控制算法原理
java·开发语言·python·tcp/ip·elasticsearch·面试·职场和发展
费弗里13 小时前
一个小技巧轻松提升Dash应用debug效率
python·dash
小小测试开发13 小时前
Python浮点型常用方法全解析:从基础到实战
python