当前位置: 首页 > news >正文

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL?

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度,这是一个很好的选择,因为它比mysql-connector-python快。

PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。

二、PyMySQL 安装

在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。

pip install PyMySQL

三、数据库连接

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# 使用 execute()  方法执行 SQL 查询
cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.
data = cursor.fetchone()print("Database version : %s " % data)# 关闭数据库连接
conn.close()
Database version : 8.0.20 

四、创建数据库表

  • 使用execute()方法来为数据库创建表,如下所示创建表student:

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS student")# 使用预处理语句创建表
sql = """CREATE TABLE student (id int(11) primary key not null auto_increment,first_name  VARCHAR(20) NOT NULL,last_name  VARCHAR(20),age int,  sex VARCHAR(2))"""cursor.execute(sql)# 关闭数据库连接
conn.close()

五、数据库插入操作

  • 使用执行 SQL INSERT 语句向表 studnet 插入记录:

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# SQL 插入语句
sql = """INSERT INTO student(first_name,last_name, age, sex)VALUES ('Li', 'Lei', 20, '男')"""
try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行conn.commit()except:# 如果发生错误则回滚conn.rollback()# 关闭数据库连接
conn.close()

  • 以上例子也可以写成如下形式:

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# SQL 插入语句
sql = "INSERT INTO student(first_name,last_name, age, sex) \VALUES ('%s', '%s',  %s,  '%s')" % \('Zhang', 'Fei', 80, '男')
try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行conn.commit()except:# 如果发生错误则回滚conn.rollback()# 关闭数据库连接
conn.close()

六、数据库查询操作

Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。

  • fetchone(): 该方法获取下一个查询结果集。结果集是一个对象

  • fetchall(): 接收全部的返回结果行.

  • rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# SQL 插入语句
sql = "INSERT INTO student(first_name,last_name, age, sex) \VALUES ('%s', '%s',  %s,  '%s')" % \('Zhang', 'Fei', 80, '男')sql = "SELECT * FROM student \WHERE age > %s" % (18)
try:# 执行SQL语句cursor.execute(sql)# 获取所有记录列表results = cursor.fetchall()for row in results:id = row[0]firstName = row[1]lastName = row[2]age = row[3]sex = row[4]# 打印结果print("id=%s,firstName=%s,lastName=%s,age=%s,sex=%s" % \(id,firstName, lastName, age, sex))
except:print("Error: unable to fetch data")# 关闭数据库连接
conn.close()
id=1,firstName=Li,lastName=Lei,age=20,sex=男
id=2,firstName=Zhang,lastName=Fei,age=80,sex=男

七、数据库更新操作

  • 更新数据表的数据,以下实例将 user 表中 name 为 'Lucy' 的 mobile 字段改成13883838438:

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# SQL 更新语句
sql = "update user set %s='%s' where name='%s'" % ('mobile', '13883838438', 'Lucy')
try:# 执行SQL语句cursor.execute(sql)# 提交到数据库执行conn.commit()
except:# 发生错误时回滚conn.rollback()# 关闭数据库连接
conn.close()

八、删除操作

删除数据表中的数据,以下实例演示了删除数据表 student 中 age 大于 30 的所有数据:

# coding=utf-8import pymysqlconn = pymysql.connect(host="127.0.0.1",  # 数据库主机地址user="root",  # 数据库用户名passwd="root",  # 数据库密码database="python_demo"  # 指定数据库
)
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = conn.cursor()# SQL 更新语句
sql = "DELETE FROM student WHERE age > %s" % (30)
try:# 执行SQL语句cursor.execute(sql)# 提交到数据库执行conn.commit()
except:# 发生错误时回滚conn.rollback()# 关闭数据库连接
conn.close()

九、执行事务

事务机制可以确保数据一致性。

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

  • 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。

  • 一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。

  • 隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。

  • 持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。

Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。

对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。

commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。

十、错误处理

DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常:

异常

描述

Warning

当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。

Error

警告以外所有其他错误类。必须是 StandardError 的子类。

InterfaceError

当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。

DatabaseError

和数据库有关的错误发生时触发。 必须是Error的子类。

DataError

当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。

OperationalError

指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。

IntegrityError

完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。

InternalError

数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。

ProgrammingError

程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。

NotSupportedError

不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。

以下为异常的继承结构:

相关文章:

【Python学习笔记】第二十六节 Python PyMySQL

一、什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库。可以用它来连接Python和MySQL。如果你追求速度,这是一个很好的选择,因为它比mysql-connector-python快。PyMySQL 遵循 Python 数据库 API v2.0 规范&#x…...

Android问题笔记 -关于Kotlin插件版本的问题

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册点击跳转>Scratch编程案例 👉关于作者 众所周知,人生是一个漫长的流程,不断克服困难,不断…...

【同步工具类:Phaser】

同步工具类:Phaser介绍特性动态调整线程个数层次Phaser源码分析state 变量解析构造函数对state变量赋值阻塞方法arrive()awaitAdvance()业务场景实现CountDownLatch功能代码测试结果实现 CyclicBarrier功能代码展示测试结果总结介绍 一个可重复使用的同步屏障,功能…...

Linux命令·rmdir

今天学习一下linux中命令: rmdir命令。rmdir是常用的命令,该命令的功能是删除空目录,一个目录被删除之前必须是空的。(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具…...

从0开始自制解释器——综述

作为一个程序员,自制自己的编译器一直是一个梦想。之前也曾为了这个梦想学习过类似龙书、虎书这种大部头的书,但是光看理论总有一些云里雾里的感觉。看完只觉得脑袋昏昏沉沉并没有觉得有多少长进。当初看过《疯狂的程序员》这本书,书里说&…...

【spring】spring5特性

1、整个 Spring5 框架的代码基于 Java8,运行时兼容 JDK9,许多不建议使用的类和方 法在代码库中删除 日志框架 2、Spring 5.0 框架自带了通用的日志封装 (1)Spring5 已经移除 Log4jConfigListener,官方建议使用 Log4j…...

曹云金回归、于谦电影杀青,德云社想不火都难

说起民间最大的相声社团,首屈一指的要属德云社,之所以说德云社最大,主要是优秀相声演员够多。德云社在郭德纲的带领下,如今已经是人才济济,听说最近队伍会进一步壮大,前徒弟曹云金也要回归了。 当年曹云金作…...

从入门到精通:数据库设计规范指南

当我们开始设计数据库时,我们需要确保它是可靠和可扩展的。为了实现这一目标,我们需要遵循一些数据库设计规范。本文将介绍一些数据库设计规范,以确保您的数据库能够满足当前和未来的业务需求。 目录 一、命名规则 二、数据类型 三、索引…...

js 求解《初级算法》8.字符串转换整数(atoi)

一、题目描述 请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数 算法如下: 读入字符串并丢弃无用的前导空格 检查下一个字符(假设还未到字符末尾)为正还是负号,读取该字符&#xff…...

Vue学习笔记(5)

5.1 其他常用内置指令 5.1.1 v-text v-text是Vue.js中常用的内置指令之一,用于将数据绑定到DOM元素的文本内容。与双花括号({{ }})类似,v-text指令也可以将Vue实例中的数据渲染到页面上。 使用v-text指令时,Vue会将指…...

LeetCode 面试题 05.02. Binary Number to String LCCI【字符串,数学】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...

数据结构 “串“ 的补充提升与KMP算法及其优化的具体实现

❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 ✨精品专栏:C面向对象 🔥系列专栏:数据结构与课程设计 文章目录…...

如何使用Spring Cloud搭建MQ(Message Queue)消息队列

Spring Cloud是一个开源框架,用于构建基于微服务架构的应用程序。它提供了多种工具和技术,用于实现各种微服务模式,并使它们易于管理和部署。MQ(消息队列)则是一种重要的异步通信机制,用于在不同的应用程序…...

iphone备忘录删除怎么恢复?分享苹果数据找回办法

手机备忘录上写记录,这是不少上班族的小习惯。因为它可以先记录紧急事务,然后再慢慢的解决。也可以把我们一些重要的账号密码存在备忘录里,方便在何时何地直接登入使用。那么如果我们不小心删除了iphone备忘录呢?碰到这种事该怎么办呢?有没…...

【PPT】《我去!还有这种网站?》-知识点目录

《我去!还有这种网站?》 1. Vega AI 输入提示: girl,粉头发2. 物理画线:休闲小游戏 3. Dialogue:影视台词搜索 4. Can you run it:游戏设备要求查询 5. Deviceshots:使用设备边…...

SQL 将查询结果插入到另一张表中

INSERT INTO (1) 如果两张表(导出表和目标表)的字段一致,并且希望插入全部数据,可以用这种方法: INSERT INTO 目标表 SELECT * FROM 来源表 WHERE 条件;例如,要将 test 表插入到 n…...

代码随想录算法训练营day48 | 动态规划 121 买卖股票的最佳时机 122 买卖股票的最佳时机II

day48121. 买卖股票的最佳时机1.确定dp数组(dp table)以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp数组122.买卖股票的最佳时机II121. 买卖股票的最佳时机 题目链接 解题思路: 动规五部曲分析如下&#xff1a…...

MediaTek 天玑 8000 5G移动平台详细参数

MediaTek 天玑 8000 移动平台 采用先进的 台积电 5nm 工艺,拥有出众的性能和能效,为高端智能手机用户提供出色的高帧率游戏和 5G 移动体验。 天玑 8000 采用了 MediaTek 诸多先进技术,内置 MediaTek Imagiq 780影像引擎、第五代 AI 处理器APU…...

Kafka

这里写目录标题1.Kafka1.1 Kafka概述1.2 kafka安装和配置1.3 入门案例1.4 kafka生产者详解1.4.1 生产者的参数1.Kafka 1.1 Kafka概述 Kafka 是一个分布式流媒体平台,类似于消息队列或企业消息传递系统。 producer:发布消息的对象称之为主题生产者(Ka…...

数据结构——第三章 栈与队列(2)

栈的运用1.括号匹配2.表达式求值2.1.算术表示式的形式2.2.后缀表达式求值2.3.将算术表达式转换为后缀表达式2.4.算术表达式直接求值3.栈与递归3.1.递归算法3.2.栈与函数调用3.3.递归工作与递归函数3.4.递归到非递归的转换1.括号匹配 void matching(char str[]) {//创建空栈Lin…...

【Linux学习】基础IO——理解缓冲区 | 理解文件系统

🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 基础IO☕理解缓冲区🧃缓冲区的共识🧃缓冲区的位置🧃缓冲区的刷…...

RHCSA-重置root密码(3.3)

方法1:rd.break (1)首先重启系统,在此页面按e键,在屏幕上显示内核启动参数 (2)知道linux这行,末尾空格后输入rd.break,然后按ctrlx (3)查看&#…...

无公网IP快解析实现U+随时随地访问

现阶段商品从生产到消费者手中要经过多个环节,为实现对每一个环节进行管理,越来越多的企业选择通过信息化手段来实现。供应链管理系统配合供应链中各实体的业务需求,使操作流程和信息系统紧密配合,做到各环节无缝链接,…...

UVa 307 Sticks 木棍拼接 ID 迭代加深搜

题目链接:Sticks 题目描述: 小明一开始有一些长度相等的木棍,小明现在将木棍砍成了一些长度为整数的木棍,他现在忘记了最开始木棍的长度,你需要找到最短的可能木棍长度,例如给定5,2,1,5,2,1,5,2,15,2,1,5,2…...

阿里云(CentOS)中MySQL8忘记密码的解决方法

阿里云(CentOS)中MySQL8忘记密码的解决方法 方法 在 skip-grant-tables 模式下启动 MySQL,该模式下启动 MySQL 时不启动授权表功能,可以直接免密码登录 实现 编辑 /etc/my.cnf 文件 vim /etc/my.cnf在 [mysqld] 区域末尾添加配置,设置免密…...

三、Spring的入门程序

第一个Spring程序 创建新的空工程spring6 设置JDK版本17&#xff0c;编译器版本17 设置IDEA的Maven&#xff1a;关联自己的maven 在空的工程spring6中创建第一个maven模块&#xff1a;spring6-001-first 在pom.xml添加spring context依赖和junit依赖&#xff0c; <?x…...

摘录一下Python列表和元组的学习笔记

1 基础概念 列表一个值&#xff0c;列表值指的是列表本身&#xff0c;而不是列表中的内容 列表用[]表示 列表中的内容称为 表项 len()函数可以显示列表中表项的个数&#xff0c;比如下面这个例子 spam [cat, bat, dog, rat]print(len(spam))列表的范围选取中&#xff0c;比…...

【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤

【量化金融】收益率、对数收益率、年华收益、波动率、夏普比率、索提诺比率、阿尔法和贝塔、最大回撤 1 收益率 在学术界&#xff0c;建模一般不直接使用资产价格&#xff0c;而是使用资产收益率(Returns)。因为收益率比价格具有更好的统计特性&#xff0c;更便于建模。下经典…...

1_机器学习概述—全流程

文章目录1 机器学习定义2 机器学习常见应用框架&#xff08;重点&#xff09;3 机器学习分类3.1 监督学习&#xff08;Supervised learning&#xff09;3.2 无监督学习&#xff08;Unsupervised learning&#xff09;3.3 半监督学习&#xff08;Semi-Supervised Learning&#…...

VUE中给对象添加新属性时,界面不刷新怎么办

一、直接添加属性的问题 举例&#xff1a; 定义一个p标签&#xff0c;通过v-for指令进行遍历 然后给botton标签绑定点击事件&#xff0c;我们预期点击按钮时&#xff0c;数据新增一个属性&#xff0c;界面也 新增一行。 <p v-for"(value,key) in item" :key&qu…...

滑县网站建设服务/电子商务与网络营销教案

面向对象 &#xff1a; 就是一种编程思想&#xff0c;是把构成问题事务分解成各个对象&#xff0c;建立对象的目的不是为了完成一个步骤&#xff0c;而是为了描叙某个事物在整个解决问题的步骤中的行为。 如我要造辆车&#xff1a; Step1. 设计画图>保时捷设计所 Step2. 原…...

中央建设举报网站/小说网站排名

问题 : 线程池中的 coreSize 和 maxSize 的作用分别是什么&#xff1f;未执行的线程池存在在哪种数据类型&#xff0c;为什么使用这种类型的数据结构ThreadPoolExecutor概述 ThreadPoolExecutor 下文简称 TPE &#xff0c;我们使用它都是从Executror 这个类中的方法 &#xff1…...

营销型网站效果/seo网站关键词优化快速官网

本词条缺少概述图&#xff0c;补充相关内容使词条更完整&#xff0c;还能快速升级&#xff0c;赶紧来编辑吧&#xff01;非线性编辑【Nonlinear Edit】&#xff0c;简称非编&#xff0c;是相对于传统上以时间顺序进行线性编辑而言。传统线性视频编辑是按照信息记录顺序&#xf…...

长沙建网站设计/做销售记住这十句口诀

2019独角兽企业重金招聘Python工程师标准>>> package com.dir;/**编号1,2, ... n个人围坐一圈&#xff0c;约定编号为k(1<k<n)的人从1开始报数&#xff0c;数到m的那个人出列&#xff0c;它的下一个人从1依次报数&#xff0c;数到m的人又出列&#xff0c;直到…...

网站运营与管理论文/网站优化招聘

我们需要一部专门规范管理监控视频的法律法规&#xff0c;以更好地明确各方的权利义务关系&#xff0c;并促进监控视频发挥其维护社会安全、公众权利的正能量。 为规范公共安全视频系统管理&#xff0c;广州市拟对《广州市公共安全视频系统管理规定》进行修改&#xff0c;较现行…...

东莞网站建设服务/营销新闻

在函数内部&#xff0c;可以调用其他函数。如果一个函数在内部调用自身本身&#xff0c;这个函数就是递归函数。举个例子&#xff0c;我们来计算阶乘n! 1 * 2 * 3 * ... * n&#xff0c;用函数fact(n)表示&#xff0c;可以看出&#xff1a;fact(n) n! 1 x 2 x 3 x ... x (n-…...