首页
学习
活动
专区
圈层
工具
发布

Python数据库操作与异常处理:一个让我半夜爬起来修Bug的故事

但那天因为网络抖动,用户点了两次提交按钮,后端接口收到了两个一模一样的注册请求。第一个请求成功了,插入了用户数据。第二个请求来了,发现手机号已经存在,INSERT语句直接报错。然后我们的代码做了什么?...违反了唯一约束cursor.execute("INSERT INTO users (phone) VALUES ('13800138000')")# sqlite3.IntegrityError: UNIQUE...constraint failed: users.phoneIntegrityError是数据完整性错误。...constraint failed: users.phone" in str(e): # 手机号已注册,应该返回"用户已存在",而不是"服务器错误" return...except sqlite3.IntegrityError as e: if "UNIQUE constraint" in str(e): raise UserAlreadyExistsError

13810

SQL命令 UPDATE(一)

如果插入请求失败由于违反唯一键(字段(s)的一些独特的关键,存在这一行已经有相同的值(s)为插入指定的行),然后它会自动变成一个更新请求这一行,并插入或更新使用指定的字段值来更新现有的行。...在极少数情况下,使用%NOLOCK的UPDATE找到要更新的行,但随后该行立即被另一个进程删除; 这种情况将导致SQLCODE -109错误:无法找到为UPDATE指定的行。...试图更新一个字段(或一组字段)的值,使更新违反惟一性约束或主键约束,将导致SQLCODE -120错误。 如果字段具有UNIQUE数据约束,或者如果惟一字段约束已应用于一组字段,则返回此错误。...例如Constraint 'MYTABLE_UNIQUE3', Field(s) FullName="Molly Bloom"; failed unique...check> or Constraint 'MYTABLE_PKEY2', Field(s) FullName="Molly Bloom"; failed

4.4K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    RESTful .NET API中的隐形杀手:为何事件优先架构是生存之道

    一个错误的假设:POST ≠ 完成 你的API返回了200 OK,但业务流程并未正常完成。 你以为一个成功的HTTP请求意味着整个操作都成功了。但在分布式系统中,这是一个危险的错觉。...问题所在 同步POST端点会导致紧耦合的执行。 你在一个事务或请求线程中完成所有工作——保存数据、触发支付、通知第三方。但一旦任何副作用失败,你就陷入了困境。重试?补偿?稍后协调?...Polly增加了本地弹性,但同步重试仍然会阻塞资源。 没有卸载的重试,API可能会持续冲击正在恢复的服务。 有序执行 REST没有跨服务的消息排序概念。...with a unique identifier derived from the event, a database unique constraint will prevent duplicates...REST在需要即时同步结果的请求-响应交互中仍然有效(如数据检索、简单CRUD、登录令牌)。在这些场景中,其简单性无可比拟。 然而,真正的力量和弹性在于混合方法。

    44910

    聊聊springboot项目如何优雅进行数据校验

    错误消息定制:可以通过资源文件或直接在注解中定义错误消息,以便向用户提供更友好的错误信息。组验证:支持按组进行验证,允许在不同的场景下应用不同的验证规则集。...嵌套对象验证:当对象中有嵌套的其他对象时,Spring可以递归地进行验证,确保整个数据结构的有效性。...错误处理:提供了灵活的错误处理机制,可以根据业务需求选择合适的错误处理策略,如返回HTTP状态码、重定向到错误页面等。...message.mobile.unique=手机号码已经存在message.mobile.format.error=手机号码格式错误message.user.not.exist=不存在用户ID为{0}的用户...,"success":false}在我们实际开发中,前端通过header传递国际化语言可能不大方便,有时候我们会直接把传递的语言放在url的请求参数中,形如BASE_URL + "user/save?

    77410

    SQL 基础(二)数据表的创建、约束、修改、查看、删除

    定长 4,精度10,小数位数0(本字段可存放10位无小数点整数,4字节大小) 无需设置精度和小数位数 Dept nvarchar(20) ) 数据表约束 数据完整性 保证数据库中数据的正确性、有效性...NOT NULL NULL 值表示“不知道、不确定、没有数据”,仅当某字段值 必须输入 才有效时可设置 NOT NULL (eg:主键),仅用于定义 列约束 定义约束名称后(若不定义,系统将自动创建...),若数据录入错误,系统将提示报错信息,无 NOT NULL 约束下,系统缺省值为 NULL -- NOT NULL 约束 create table s ( Sno varchar(6) constraint...nchar(1), Age int, Dept nvarchar(20), constraint s_unique UNIQUE(Sn,Sex) -- 表约束 语法格式 s_unique 定义约束名称(...约束,但仅可有一个 PRIMARY KEY UNIQUE 约束的唯一键值可为 NULL ,PRIMARY KEY 约束的一列或多列组合,任意列都不能出现 NULL 值 同一列或同一组列,不能同时定义

    2.5K20

    MySQL数据库——表的约束(非空约束、唯一约束、主键约束、外键约束)

    目录 1 表的约束 约束,是对表中的数据进行限定,保证数据的正确性、有效性和完整性,约束分为以下几类: 主键约束:primary key 非空约束:not null 唯一约束:unique 外键约束:foreign...MODIFY NAME VARCHAR(20) NOT NULL;  3)删除name的非空约束: ALTER TABLE stu MODIFY NAME VARCHAR(20) 1.2 唯一约束:unique...,值不能重复 1)创建表时添加唯一约束: CREATE TABLE stu( id INT, number VARCHAR(20) UNIQUE ); 注意:MySQL中唯一约束限定的列的值可以有多个...主键就是表中记录的唯一标识; 2)创建表时添加主键约束 CREATE TABLE stu( id INT PRIMARY KEY, number VARCHAR(20) ); 3)删除主键 -- 错误方式...以上仍然存在一个问题,当在员工表中输入不存的部门时,数据依然可以添加,不符合实际,因此,这里就可以通过使用外键约束来解决。 【概念】什么是外键约束?

    18.8K21

    SpringMVC参数校验(针对`@RequestBody`返回`400`)

    spring返回400的时候通常没有任何错误提示,当然也通常是参数不匹配。这在参数少的情况下还可以一眼看穿,但当参数很大是,排除参数也很麻烦,更何况,既然错误了,为什么指出来原因呢。...springmvc异常处理 最开始的时候也想过自己拦截会出异常的method来进行异常处理,但显然不需要这么做。spring提供了内嵌的以及全局的异常处理方法,基本可以满足我的需求了。 1....@RequestMapping(value = "saveOrUpdate", method = RequestMethod.POST) public String saveOrUpdate(HttpServletResponse...business_type; //.... } controller里添加@Valid @RequestMapping(value = "sign", method = RequestMethod.POST...out_trade_no": "不能为空", "business_type": "订单类型不能为空" } } 大概有这么几个限制注解: /** * Bean Validation 中内置的 constraint

    3.3K40

    boss: 这小子还不会使用validator库进行数据校验,开了~~~

    这周在公司做项目,在做API部分开发时,需要对请求参数的校验,防止用户的恶意请求。例如日期格式,用户年龄,性别等必须是正常的值,不能随意设置。...所以user1会进行报错,错误信息如下: Key: 'User.Name' Error:Field validation for 'Name' failed on the 'min' tag Key:...for 'Sex' failed on the 'oneof' tag 各个字段违反了什么约束,一眼我们便能从错误信息中看出来。...:指定唯一性约束,不同类型处理不同: 对于map,unique约束没有重复的值 对于数组和切片,unique没有重复的值 对于元素类型为结构体的碎片,unique约束结构体对象的某个字段不重复,使用unique...= nil { fmt.Printf("init trans failed, err:%v\n", err) return } router := gin.Default() router.POST

    1.1K20

    http状态码一览表

    http状态码一览表 1**:请求收到,继续处理 2**:操作成功收到,分析、接受 3**:完成此请求必须进一步处理 4**:请求包含一个错误语法或不能完成 5**:服务器执行一个完全有效请求失败 100...中使用的代码,现行版本中不再使用 307——申明请求的资源临时性删除 400——错误请求,如语法错误 401——请求授权失败 402——保留有效ChargeTo头响应 403——请求不允许 404——...但基于JavaScript 脚本的自动重载在这种情况下仍然需要能够起作用。...307状态被加入到 HTTP 1.1中是由于许多浏览器在收到302响应时即使是原始消息为POST的情况下仍然执行了错误的转向。只有在收到303响应时才假定浏览器会在POST请 求时重定向。...412 (Precondition Failed/先决条件错误) 412 (SC_PRECONDITION_FAILED)状态指出请求头信息中的某些先决条件是错误的。

    2.2K70

    sql server 2008 数据库的完整性约束

    缺省和规则对象通常只在它所创建的数据库中有效,不是ANSI标准,一般不提倡使用。 应尽可能使用约束,任何可以使用缺省与规则的地方都有可以使用约束。 1....但每列可应用多个CHECK约束。 如果要删除规则,应确定规则已经解除绑定。...如果规则与绑定的列不兼容,SQL Server将在插入值时返回错误信息。...(3)SQL Server创建了UNIQUE约束后会自动创建UNIQUE索引来强制UNIQUE约束的唯一性要求。 (4)如果插入重复行,SQL Server将返回错误信息。...(6)UNIQUE约束与主键约束的区别: 主键也强制执行唯一性,但主键不允许空值,而且每个表中主键只能有一个,但UNIQUE列可以有多个,可以取空值。 (7)UNIQUE约束优先于唯一索引。

    3.4K40
    领券