sqlmodel实现唯一性校验3,检查多列同时重复

之前的方案虽然能够解决重复性问题,但是没有覆盖到多列同时重复的情况。

比如,我们可以认为用户名是可以重复的。但是用户名和年龄不能同时重复,那么这种情况该怎么解决呢?

之前的代码如下:

from sqlalchemy import select
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.drop_all(engine)
SQLModel.metadata.create_all(engine)# 添加用户的方法
def add_user(name: str, age: int):user = User(name=name, age=age)with Session(engine) as session:# 检查是否已存在statement = select(User).where(User.name == name)results = session.exec(statement)db_user = results.first()print("查询结果:", db_user)if db_user is not None:print(f"用户 {name} 已存在")return# 执行添加session.add(user)session.commit()# 创建两个名字重复的用户
add_user("张三", 23)
add_user("张三", 24)# 查询所有用户
with Session(engine) as session:statement = select(User)results = session.exec(statement).all()print(results)

这里我选择在查询条件上加一个条件,查询的时候根据name和age同时查询。
代码改写如下:

from sqlalchemy import select
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)age: int | None = None# 创建引擎
engine = create_engine("sqlite:///database.db", echo=True)# 初始化表
SQLModel.metadata.drop_all(engine)
SQLModel.metadata.create_all(engine)# 添加用户的方法
def add_user(name: str, age: int):user = User(name=name, age=age)with Session(engine) as session:# 检查是否已存在# statement = select(User).where(User.name == name).where(User.age == age)statement = select(User).where(User.name == name, User.age == age)results = session.exec(statement)db_user = results.first()print("查询结果:", db_user)if db_user is not None:print(f"用户 {name}, {age} 已存在")return# 执行添加session.add(user)session.commit()# 创建两个名字重复的用户
add_user("张三", 23)
add_user("张三", 24)
add_user("张三", 24)  # 期望第三个才重复# 查询所有用户
with Session(engine) as session:statement = select(User)results = session.exec(statement).all()print(results)

执行结果如下:
在这里插入图片描述

前两次的时候都没有重复,第三次重复了,所以没有写入。

注意,这种情况需要将原来模型中name的unique约束去掉才行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/832746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据集标签数量不均衡如何设计loss均衡数量

数据集标签数量不均衡如何设计loss均衡数量 1. 思路出发点: 对于哪些数量分布比值较少的标签提供更多的loss注意力比重,如何提高训练注意力比重,也就是说,让模型的梯度更多的倾向于有利于数据标签分布较少的数据训练&#xff0c…

【快捷部署】023_HBase(2.3.6)

📣【快捷部署系列】023期信息 编号选型版本操作系统部署形式部署模式复检时间023HBase2.3.6Ubuntu 20.04tar包单机2024-05-07 注意:本脚本非全自动化脚本,有2次人工干预,第一次是确认内网IP,如正确直接回车即可&#…

Linux和Windows修改动态库的名字

一、概述 有时候我们创建windows的Dll或者Linux下的So库时候,在已经生成的产物里面我们又不想重新修改工程来修改我们动态库的名字,这个应该怎么做呢,windows跟linux两个平台使用的工具不一样。比如我们有一个TestA.Dll和TestA.lib或者 TestA…

git: 远程分支同步到本地

git pull origin <远程分支名> git pull可以将远程某一个分支下拉到本地并和本地的分支进行合并。如果不加origin <远程分支名>&#xff0c;那么这个同步就是将当前本地分支对应的远程分支给下拉合并进当前本地分支 git fetch --all 下载所有远程分支代码到本地…

了解TMS运输管理系统,实现物流高效运转

TMS运输管理系统&#xff08;Transportation Management System&#xff09;是一种集成物流和信息技术的解决方案&#xff0c;通过优化运输流程、实时跟踪货物信息和自动化管理操作&#xff0c;提高物流效率&#xff0c;降低运营成本&#xff0c;实现高效运输。 TMS运输管理系…

吴恩达2022机器学习专项课程C2(高级学习算法)W1(神经网络):2.4 神经网络层

目录 神经网络第一层&#xff08;隐藏层&#xff09;计算过程1.输入向量2.神经元的计算2.标识不同神经元3.层输出&#xff08;激活&#xff09;向量4.神经网络分层5.标识不同层 神经网络第二层&#xff08;输出层&#xff09;计算过程1.输入向量2.层输出&#xff08;激活&#…

Vue CLI配置代理、2.0、3.0

一、vue cli2.0 代理配置 proxy: {/api:{target: "http://localhost:8067",pathRewrite: {/api: }}, } 一、vue cli3.0 代理配置 proxy: {/api: {target: http://localhost:8067,pathRewrite: {/api: }} }

为什么有了MTU,还需要MSS?

为什么有了MTU&#xff0c;还需要MSS? MTU Maximum Transmit Unit&#xff0c;最大传输单元。由数据链路层提供给网络最大的一次传输数据的大小&#xff0c;一般MTU1500Byte. “车同轨”&#xff0c;保证底层数据包能在物理网络中顺利传输&#xff01;&#xff01;&#xff…

Redis 之 布隆过滤器 与 布谷鸟过滤器

大家都知道,在计算机中IO一直是一个瓶颈,很多框架以及技术甚至硬件都是为了降低IO操作而生,今天聊一聊过滤器,先说一个场景: 我们业务后端涉及数据库,当请求消息查询某些信息时,可能先检查缓存中是否有相关信息,有的话返回,如果没有的话可能就要去数据库里面查询,这时候有一个…

虚拟环境 conda activate

使用命令conda activate pytorch激活pytorch时出现以下报错&#xff1a; usage: conda-script.py [-h] [–no-plugins] [-V] COMMAND … conda-script.py: error: argument COMMAND: invalid choice: ‘activate’ (choose from ‘clean’, ‘compare’, ‘config’, ‘create’…

C语言struct person{...};person a;为什么编泽出错?

一、问题 在结构体中定义⼀个变量&#xff0c;可以有很多种⽅法&#xff0c;为什么这样定义编译出错呢&#xff1f; 例如&#xff1a; struct persont{...};person a; 二、解答 在解答编译出错的原因之前&#xff0c;先要了解⼏种正确的定义结构体类型变量的⽅法。 &#xf…

在echarts中使用geojson地图

以中国地图为例 先看效果 代码实现&#xff1a; <div id"refChinaMap" :style"{ width: 75%, height: 100% }"></div>import * as echarts from "echarts"; import ChinaJSON from "./chinaMap.json";const initChinaMa…

功率控制单元PCU系统简介

什么是PCU系统 近年来&#xff0c;新能源汽车市场竞争愈发激烈。电驱动系统关乎整车的制造成本&#xff0c;影响整车性能。因此&#xff0c;新能源汽车电驱动系统成为业内研究热点。电驱动系统作为新能源汽车的核心部件&#xff0c;控制电机输出驱动转矩或制动转矩&#xff0c…

c语言数据结构之一(单链表)

前言 链表是最基础的数据结构&#xff0c;可以用于实现栈、队列等等。 实现原理 节点&#xff08;Node&#xff09;&#xff1a;链表的基本构建单元是节点&#xff0c;每个节点包含两部分&#xff1a;数据和指向下一个节点的指针。在C语言中&#xff0c;节点通常用结构体来表…

什么是分布式事务?

典型回答 分布式事务是指在分布式系统中涉及到多个数据库或多个应用程序之间的事务处理&#xff0c;这些数据库或应用程序可能分布在不同的物理节点上&#xff0c;甚至可能位于不同的地理位置。在分布式事务中&#xff0c;需要确保所有参与者的事务操作都能够保持一致性&#…

三步学会苹果手机怎么关震动的方法!

苹果手机的震动功能在某些情况下可能会被认为是不必要的&#xff0c;比如在会议、课堂或者晚间睡眠时。因此&#xff0c;学会如何关闭苹果手机的震动功能是非常实用的。苹果手机怎么关震动&#xff1f;在本文中&#xff0c;我们将介绍三个步骤&#xff0c;帮助你关闭苹果手机的…

XSS-Labs 靶场通过解析(下)

前言 XSS-Labs靶场是一个专门用于学习和练习跨站脚本攻击&#xff08;XSS&#xff09;技术的在线平台。它提供了一系列的实验场景和演示&#xff0c;帮助安全研究人员、开发人员和安全爱好者深入了解XSS攻击的原理和防御方法。 XSS-Labs靶场的主要特点和功能包括&#xff1a;…

K邻算法:在风险传导中的创新应用与实践价值

程序员的实用神器 ⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越…

Python 中使用私有成员的子类化

1、问题背景 Python 语言中&#xff0c;变量名与访问器同名是一个非常好的特性&#xff1a; self.__value 1def value():return self.__value但是&#xff0c;当我们想要子类化一个类&#xff0c;并访问其私有成员时&#xff0c;却没有一种简单的方法。通常&#xff0c;我们…

使用Spring Boot构建RESTful API的最佳实践

在使用Spring Boot构建RESTful API时&#xff0c;遵循一些最佳实践可以帮助你创建可维护、可扩展且安全的应用程序。以下是一些关键的最佳实践&#xff1a; ### 1. 使用Spring Initializr开始项目 Spring Initializr&#xff08;[https://start.spring.io/](https://start.spr…