pymysql执行非查询语句会自动提交事务,关闭事务自动提交

一、前置条件

在mysql数据库生成数据:

CREATE DATABASE mydatabase;CREATE TABLE Course (CourseID INT PRIMARY KEY,CourseName VARCHAR(100),Instructor VARCHAR(100),Credits INT,StudentID INT,FOREIGN KEY (StudentID) REFERENCES StudentInformation(StudentID)
);INSERT INTO CourseInformation (CourseID, CourseName, Instructor, Credits, StudentID)
VALUES(1, 'Math', 'John', 3, 1),(2, 'English', 'Sarah', 2, 2),(3, 'Physics', 'David', 4, 3),(4, 'Chemistry', 'Emily', 3, 1);

python执行非查询语句:

import pymysql# 创建连接
conn = pymysql.connect(host="127.0.0.1",    # 参数根据实际数据填写port=3306,user="root",password="root",database="mydatabase")# 创建游标
cursor = conn.cursor()# 执行增加数据sql语句
sql = "insert into course(CourseID,CourseName,Instructor) values(5,'语文','xu');"
cursor.execute(sql)# 删除游标
cursor.close()# 删除连接
conn.close()

二、执行效果

三、原因分析

1、python代码没有开启自动提交,默认autocommit=False

2、mysql默认开启了自动提交,autocommit=1(SELECT @@autocommit;),但是执行

set autocommit=0后再次执行该python代码,仍然会自动提交事务即成功添加数据

3、查询数据表的存储引擎

# 查看当前数据库支持的存储引擎
show ENGINES;# 查看指定数据库所有表使用的存储引擎
show table status from 库名;    # 查看指定表的存储引擎
show create table 表名;

发现上面sql语句生成的数据表默认的存储引擎是MyISAM,经查询MyISAM不支持事务,需要换成支持事务的存储引擎

四、结论

        使用sql语句没有指定存储引擎会默认使用MyISAM引擎,该引擎不支持事务,需要换成支持事务的存储引擎,例如:Mysql 的InnoDB

        切换到支持事务的引擎之后,使用上述sql语句执行后,MySQL会将这些修改暂时存储在内存中,这些修改被称为"未提交的数据"。在事务提交之前,所有的修改都不会被写入到磁盘上的数据文件中,而是存储在内存中的缓冲区中,只有进行事务的提交或回滚操作才会将执行的结果写入到磁盘上的数据文件中

  • 事务提交(2选1):
1、conn = pymysql.connect(host="127.0.0.1",port=3306,user="root",password="root",database="mydatabase",autocommit=True)    # 开启自动提交2、conn.commit()    # 事务提交,conn是数据库连接对象
  • 事务回滚:
conn.rollback()    # 事务回滚,conn是数据库连接对象

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

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

相关文章

win10 Baichuan2-7B-Chat-4bits 上部署 百川2-7B-对话模型-4bits量化版

搞了两天才搞清楚跑通 好难呢,个人电脑 win10 ,6GB显存 个人感觉 生成速度很慢,数学能力不怎么行 没有ChatGLM2-6B 强,逻辑还行, 要求: 我的部署流程 1.下载模型 ,下载所有文件 然后 放到新建的model目录 https://huggingface.co/baichuan-inc/Baichuan2-7B-Chat-4bits/tr…

HarmonyOS之 组件的使用

一 容器 1.1 容器分类 Column表示沿垂直方向布局的容器。Row表示沿水平方向布局的容器。 1.2 主轴和交叉轴 主轴:在Column容器中的子组件是按照从上到下的垂直方向布局的,其主轴的方向是垂直方向;在Row容器中的组件是按照从左到右的水平方向…

怒刷LeetCode的第11天(Java版)

目录 第一题 题目来源 题目内容 解决方法 方法一:迭代 方法二:递归 方法三:指针转向 第二题 题目来源 题目内容 解决方法 方法一:快慢指针 方法二:Arrays类的sort方法 方法三:计数器 方法四…

Golang net/http 包中的 RoundTripper 接口详解

RoundTripper 是什么? RoundTripper 是 net/http 包中的一个接口,定义了处理 HTTP 请求返回和响应的方法,是 http.Client 结构体中执行 http 请求的核心部分。接口定义如下: type RoundTripper interface {RoundTrip(*Request)…

如何借助上线初期运维管理守住项目建设最后一公里

随着运营商技术升级、业务发展,以及服务能力要求提升,当下新建项目的交付或系统大版本升级大多数都需要历经千辛万苦才达到上线的彼岸。然而,项目上线并不意味着项目结束,“上线”也并不意味着终点,而是一个新的管理模…

Redis学习笔记--001

Redis快速入门 文章目录 Redis快速入门一、初识Redis1.1、NoSQL数据库1.2、Redis介绍1.3、[Redis](https://redis.io/)的安装 二、Redis常见命令2.1、Redis默认启动2.2、指定配置启动2.3、Redis开机自启设置 三、Redis客户端3.1、Redis命令行客户端3.2、图形化桌面客户端 四、r…

软件项目开发的流程及关键点

软件项目开发的流程及关键点 graph LR A[需求分析] --> B[系统设计] B --> C[编码开发] C --> D[测试验证] D --> E[部署上线] E --> F[运维支持]在项目开发的流程中,首先是进行需求分析,明确项目的目标和功能要求。接下来是系统设计&am…

【Vue.js】vue-cli搭建SPA项目并实现路由与嵌套路由---详细讲解

一,何为SPA SPA(Single Page Application)是一种 Web 应用程序的开发模式,它通过使用 AJAX 技术从服务器异步加载数据,动态地更新页面内容,实现在同一个页面内切换不同的视图,而无需整页刷新 1.…

优维低代码实践:图片和搜索

优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 优维…

爬虫 — App 爬虫(一)

目录 一、介绍二、APP 爬虫常见反爬三、APP 抓包常用工具四、模拟器五、安装 APP1、下载 APP2、安装 APP 六、fiddler1、工作原理2、安装3、基本介绍 七、环境配置1、fiddler 的配置2、夜神模拟器的配置 八、案例 一、介绍 爬虫分类——数据来源 1、PC 端爬虫(网页…

Multisim14.0仿真(二十)74LS161 4位同步二进制加法计数器

一、仿真原理图: 二、仿真效果图:

云计算的未来:云原生架构和自动化运维的崭露头角

文章目录 云计算的演进云原生架构1. 容器化2. 微服务3. 自动化部署和扩展4. 故障恢复 自动化运维1. 基础设施即代码(IaC)2. 运维自动化示例:使用Ansible自动化配置管理 3. 自动化监控和报警 未来展望1. 更多的自动化2. 多云混合云3. 边缘计算…

Matlab程序结构

目录 顺序结构循环结构1、for循环结构 分支结构1、if...end结构2、if...else...end结构3、switch...case...end结构 顺序结构 顺序结构是最简单的程序结构。用户在编写玩程序后,系统就将按照程序的实际位置逐一顺次执行。 例1:求a、b两个数组的和 >…

《DevOps实践指南》- 读书笔记(九)

DevOps实践指南 25. 附录附录 1 DevOps 的大融合精益运动敏捷运动Velocity 大会运动敏捷基础设施运动持续交付运动丰田套路运动精益创业运动精益用户体验运动Rugged Computing 运动 附录 2 约束理论和核心的长期冲突附录 3 恶性循环列表附录 4 交接和队列的危害附录 5 工业安全…

Calendar对象获取当前周的bug

项目场景: 双周项目管理,需要获取当前周为一年之中的第几周,原先的代码是用Calendar对象,先用setTime()把当前时间传入,再用get(3)获取一年中的第几周 问题描述 实际发…

如何向PDB文件添加双键

在用PDB文件进行分子绘图的时候(制作OBJ),发现像Atomic blender插件和PDB本身并不支持双键,需要对PDB文件进行修改,参照的该yt链接https://www.youtube.com/watch?vYNoow7qkwFA&t364s&ab_channelEdvinFako 即…

Secrets of RLHF in Large Language Models Part I: PPO

本文是LLM系列文章,针对《Secrets of RLHF in Large Language Models Part I: PPO》的翻译。 大型语言模型中RLHF的秘密(上):PPO 摘要1 引言2 相关工作3 人类反馈的强化学习4 有益和无害的奖励模型5 PPO的探索6 评估和讨论局限性…

由于找不到d3dx9_43.dll,无法继续执行代码要怎么解决

D3DX9_43.dll是一个动态链接库文件,它是DirectX的一个组件,主要用于支持一些旧版本的游戏和软件。当电脑缺少这个文件时,可能会导致这些游戏和软件无法正常运行。例如,一些老游戏可能需要D3DX9_43.dll来支持图形渲染等功能。此外&…

UNIAPP利用canvas绘制图片和文字,并跟随鼠标移动

最近有个项目&#xff0c;要触摸组件&#xff0c;产生一条图片跟随移动&#xff0c;并显示相应的文字&#xff0c;在网上找了一些资料&#xff0c;终于完成构想&#xff0c;废话少说&#xff0c;直接上代码&#xff08;测试通过&#xff09; <template> <view>…

#循循渐进学51单片机#变量进阶与点阵LED#not.6

1、掌握变量的作用域及存储类别。 局部变量 函数内部声明的变量&#xff0c;只在函数内部有效&#xff0c;在本函数以外是不能使用的&#xff0c;叫局部变量。 全局变量 在函数外部声明的变量就是全局变量&#xff0c;一个源程序可以包含一个或多个函数&#xff0c;全局变量…