03 Python进阶:MySQL - mysql-connector
mysql-connector安装

要在 Python 中使用 MySQL 数据库,你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤:
-  首先,确保你已经安装了 Python,如果没有安装,可以在 Python 官网(https://www.python.org)下载并安装最新版本的 Python。 
-  打开命令行或终端,在命令行中运行以下命令安装 MySQL Connector/Python: 

这将会从 PyPI 上下载并安装 MySQL Connector/Python。
注意:如果你的 MySQL 是 8.0 版本,密码插件验证方式发生了变化,早期版本为 mysql_native_password,8.0 版本为 caching_sha2_password,所以需要做些改变:先修改 my.ini 配置:[mysqld]
default_authentication_plugin=mysql_native_password
然后在 mysql 下执行以下命令来修改密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
创建数据库连接
安装完成后,你就可以在 Python 脚本中使用 MySQL Connector/Python 来连接和操作 MySQL 数据库了。下面是一个简单的示例代码:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建游标对象
mycursor = mydb.cursor()# 执行 SQL 查询
mycursor.execute("SELECT * FROM mytable")# 获取查询结果
for x in mycursor:print(x)
在上面的代码中,你需要将 host、user、password 和 database 替换为实际的数据库连接信息,然后根据需求执行相应的 SQL 查询。
这样,你就可以在 Python 中使用 MySQL Connector/Python 来连接、查询和操作 MySQL 数据库了。
创建数据库
在 Python 中,你可以使用 MySQL Connector/Python 来创建数据库。以下是一个简单的示例代码:
import mysql.connector# 连接到 MySQL 服务器
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword"
)# 创建一个名为 'mydatabase' 的数据库
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
在上面的示例中,你需要将 host、user 和 password 替换为实际的数据库连接信息。运行这段代码后,将在 MySQL 服务器上创建一个名为 mydatabase 的数据库。
确保你的账户有足够的权限来创建数据库。另外,如果你想指定数据库的字符集和校对规则,可以在创建数据库时加上参数,例如:
mycursor.execute("CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci")
这将创建一个使用 UTF-8 字符集和 utf8mb4_unicode_ci 校对规则的数据库。
创建数据表
在 Python 中使用 MySQL Connector/Python 创建数据表的方法与在 MySQL 命令行中创建数据表的方法类似。以下是一个示例代码,演示如何在 Python 中创建一个名为 users 的数据表:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"  # 已存在的数据库
)# 创建一个数据表
mycursor = mydb.cursor()mycursor.execute("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")
在上面的示例中,我们连接到了已存在的数据库 mydatabase,然后使用 CREATE TABLE 语句创建了一个名为 users 的数据表,其中包含 id、name 和 age 三个字段。
你可以根据需要定义数据表的字段及其类型。运行这段代码后,将在数据库中创建一个名为 users 的数据表。
注意:确保你具有足够的权限来创建数据表。另外,你也可以为表中的列指定约束、默认值等其他属性,具体语法可以根据需要调整。
主键设置
在 MySQL 中,可以使用 PRIMARY KEY 来定义表中的主键。在 Python 中使用 MySQL Connector/Python,也可以通过以下方式为数据表设置主键:
# 创建一个数据表,并指定主键
mycursor.execute("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255), age INT)")
在上面的示例中,我们在 id 字段上使用了 AUTO_INCREMENT PRIMARY KEY,这意味着 id 是主键,并且会自动递增。
如果你想在多个字段上定义复合主键,可以使用如下方式:
# 创建一个数据表,并指定复合主键
mycursor.execute("CREATE TABLE users (id1 INT, id2 INT, PRIMARY KEY (id1, id2))")
在这个例子中,我们将 id1 和 id2 作为复合主键。无论是单个字段还是复合主键,都需要确保它们能唯一标识表中的每一行数据。
通过以上方法,你可以在 Python 中使用 MySQL Connector/Python 为数据表设置主键。如果需要更复杂的约束或索引,也可以通过相应的 SQL 语句进行设置。
插入数据
当使用 MySQL Connector/Python 向数据库中的数据表插入数据时,可以使用如下方法:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 插入数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
val = ("John", 30)
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "记录插入成功。")
在上面的示例中,我们向名为 users 的数据表中插入了一条数据,这条数据包含了 name 和 age 两个字段的值。通过使用 %s 占位符和元组 val 传递数据,我们可以避免 SQL 注入攻击,并使代码更加安全。
在执行 execute() 后,我们调用了 commit() 方法来提交事务。只有在调用 commit() 后,数据才会真正被插入到数据库中。
以上就是使用 MySQL Connector/Python 向数据表插入数据的简单示例。你可以根据需要修改 val 中的数据以及 SQL 语句来插入更多的记录。
批量插入
如果需要批量插入多条数据到数据库中,可以使用 MySQL Connector/Python 的 executemany() 方法。以下是一个示例代码,演示如何批量插入多条数据:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 插入多条数据
sql = "INSERT INTO users (name, age) VALUES (%s, %s)"
values = [("Alice", 25),("Bob", 30),("Charlie", 28)
]mycursor.executemany(sql, values)# 提交执行
mydb.commit()print(mycursor.rowcount, "记录插入成功。")
在上面的示例中,我们定义了一个包含多个元组的 values 列表,每个元组表示要插入的一条数据。然后,我们使用 executemany() 方法将这些数据批量插入到数据库中。
与单条插入相同,执行 commit() 语句来提交事务,确保数据被正确插入到数据库中。
通过这种方式,你可以方便地批量插入多条数据到数据库中。记得根据实际需求调整数据和 SQL 语句。
查询数据
无条件查询
要在 Python 中使用 MySQL Connector/Python 查询数据,你可以通过以下方式实现:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行查询
mycursor.execute("SELECT * FROM users")# 获取查询结果
result = mycursor.fetchall()
for row in result:print(row)
在上面的示例中,我们首先连接到了数据库,然后创建了一个游标对象。游标对象允许我们执行 SQL 查询并获取结果。在这个例子中,我们执行了一个简单的 SELECT 查询来获取 users 表中的所有记录,并通过 fetchall() 方法获取查询结果。
最后,我们遍历查询结果,并打印出每一行数据。
条件查询
如果需要添加查询条件或者只获取部分字段的数据,可以根据需要修改 SQL 查询语句。
 要在 Python 中进行带有条件的查询,只需在 SQL 查询语句中添加条件即可。以下是一个示例代码,演示如何使用 MySQL Connector/Python 进行条件查询:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行带有条件的查询
sql = "SELECT * FROM users WHERE age > %s"
val = (25, )  # 查询年龄大于25的用户
mycursor.execute(sql, val)# 获取查询结果
result = mycursor.fetchall()
for row in result:print(row)
在上面的示例中,我们执行了一个带有条件的查询,通过 WHERE 子句筛选出了年龄大于25的用户。我们将条件值(这里是 25)作为元组传递给 execute() 方法,以避免 SQL 注入攻击。
你可以根据需要修改查询条件,例如更改比较运算符、添加多个条件等。通过在 SQL 查询语句中灵活添加条件,你可以实现不同类型的查询操作。
删除记录
要在 Python 中使用 MySQL Connector/Python 删除记录,你可以按照以下步骤进行操作:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行删除操作
sql = "DELETE FROM users WHERE name = %s"
val = ("Alice",)  # 删除名为 Alice 的记录
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "条记录已被删除。")
在上面的示例中,我们执行了一个删除操作,通过 DELETE FROM 语句删除了名为 “Alice” 的记录。类似于条件查询,我们将需要删除的记录的条件值作为元组传递给 execute() 方法。
在执行 delete 操作后,一定要调用 commit() 方法提交事务,确保删除操作生效。如果不调用 commit(),记录将不会被真正删除。
表记录清空
要在Python中使用MySQL Connector/Python清空表中的所有记录,你可以按照以下步骤进行操作:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行清空表记录操作
sql = "TRUNCATE TABLE yourtablename"
mycursor.execute(sql)print("表记录已成功清空")
在上面的示例中,我们使用TRUNCATE TABLE语句清空了名为"yourtablename"的表中的所有记录。这条语句会立即删除表中的所有记录,但是保留表结构不变。请谨慎操作,因为一旦清空操作完成,将无法恢复数据。
请确保你明确了解清空表记录的后果,并在需要清空表记录时再执行该操作。
更新表数据
在 Python 中使用 MySQL Connector/Python 更新表数据的方法如下所示:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行更新操作
sql = "UPDATE users SET age = %s WHERE name = %s"
val = (32, "Alice")  # 更新名为 Alice 的记录的年龄为 32
mycursor.execute(sql, val)# 提交执行
mydb.commit()print(mycursor.rowcount, "条记录已被更新。")
在上面的示例中,我们执行了一个更新操作,通过 UPDATE 语句将名为 “Alice” 的记录的年龄更新为 32。我们将更新操作的条件值和新值作为元组传递给 execute() 方法。
和删除操作类似,需要调用 commit() 方法提交事务,确保更新操作生效。
删除表
要在Python中使用MySQL Connector/Python删除表,你可以按照以下步骤进行操作:
import mysql.connector# 连接到 MySQL 数据库
mydb = mysql.connector.connect(host="localhost",user="yourusername",password="yourpassword",database="mydatabase"
)# 创建一个游标对象
mycursor = mydb.cursor()# 执行删除表操作
sql = "DROP TABLE IF EXISTS yourtablename"
mycursor.execute(sql)print("表已成功删除")
在上面的示例中,我们执行了一个删除表的操作,通过DROP TABLE语句删除了名为"yourtablename"的表。如果你确信表存在可以不添加IF EXISTS部分。
在执行DROP TABLE操作后,表将被立即删除,所以请谨慎操作。该操作无法撤销,并且会永久删除表及其数据,因此请在明确知道删除目的时再执行该操作。
数据库事务
使用 mysql-connector 库执行事务与使用 pymysql 类似,需要在 Python 中连接到 MySQL 数据库,并利用 connection 对象的方法来执行事务的提交和回滚。
以下是一个示例代码,演示了如何在 mysql-connector 中执行事务:
import mysql.connector# 连接到数据库
connection = mysql.connector.connect(host='your_host',user='your_username',password='your_password',database='your_database_name'
)try:# 开始事务connection.start_transaction()# 创建游标cursor = connection.cursor()# 执行多个 SQL 命令,这里仅作示例insert_sql_1 = "INSERT INTO table1 (column1, column2) VALUES (%s, %s)"insert_sql_2 = "INSERT INTO table2 (column3, column4) VALUES (%s, %s)"# 执行第一个插入操作cursor.execute(insert_sql_1, ('value1', 'value2'))# 执行第二个插入操作cursor.execute(insert_sql_2, ('value3', 'value4'))# 提交事务connection.commit()except mysql.connector.Error as e:# 如果出现异常,回滚事务connection.rollback()print(f"An error occurred: {e}")finally:# 关闭游标和连接cursor.close()connection.close()
在上述示例中,我们首先通过 connection.start_transaction() 开启了一个事务。然后,在 try 块中执行了两个插入操作。如果所有操作顺利完成,就会通过 connection.commit() 提交事务。如果其中任何一步出现了异常,connection.rollback() 会回滚事务,使所有操作都不会生效。
通过使用事务,可以确保在执行一系列相关操作时,要么全部成功,要么全部失败。这对于确保数据的完整性和一致性非常重要。
关注我,不迷路,共学习,同进步
关注我,不迷路,共学习,同进步

相关文章:
 
03 Python进阶:MySQL - mysql-connector
mysql-connector安装 要在 Python 中使用 MySQL 数据库,你需要安装 MySQL 官方提供的 MySQL Connector/Python。下面是安装 MySQL Connector/Python 的步骤: 首先,确保你已经安装了 Python,如果没有安装,可以在 Python…...
 
InnoDB 行记录格式(“存储一行行数据的结构“)
1.行格式 1.1 Compact行格式 1.1.1 示意图 1.1.2 准备一下 1)建表 mysql> CREATE TABLE record_format_demo (-> c1 VARCHAR(10),-> c2 VARCHAR(10) NOT NULL,-> c3 CHAR(10),-> c4 VARCHAR(10)-> ) CHARSETascii ROW_FORMATCOM…...
 
【洛谷】P9236 [蓝桥杯 2023 省 A] 异或和之和
题目链接 P9236 [蓝桥杯 2023 省 A] 异或和之和 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 思路 1. 暴力求解 直接枚举出所有子数组,求每个子数组的异或和,再对所有的异或和求和 枚举所有子数组的时间复杂度为O(N^2)&…...
ThreadLocal加切面实现线程级别的方法缓存
1、实现效果 当一个请求线程多次请求A方法时,只会触发一次A方法的实际调用,会将方法结果缓存起来,避免多次调用。 2、实现过程 1. 需要一个注解ThreadLocalCache,在需要缓存的方法上加上该注解 2. 需要一个切面,借助ThreadLocal,将结果缓存起来,利用环绕通知来实现方法拦截从…...
 
使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流
使用 Flume 将 CSV 数据导入 Kafka:实现实时数据流 文介绍了如何使用 Apache Flume 将 CSV 格式的数据从本地文件系统导入到 Apache Kafka 中,以实现实时数据流处理。通过 Flume 的配置和操作步骤,我们可以轻松地将数据从 CSV 文件中读取并发…...
 
对代理模式的理解
目录 一、前言二、案例1 代码2 自定义代理类【静态代理】2.1 一个接口多个实现,到底注入哪个依赖呢?2.1.1 Primary注解2.1.2 Resource注解(指定name属性)2.1.3 Qualifier注解 2.2 面向接口编程2.3 如果没接口咋办呢?2.…...
 
#QT项目实战(天气预报)
1.IDE:QTCreator 2.实验: 3.记录: (1)调用API的Url a.调用API获取IP whois.pconline.com.cn/ipJson.jsp?iphttp://whois.pconline.com.cn/ipJson.jsp?ip if(window.IPCallBack) {IPCallBack({"ip":&quo…...
 
数据挖掘|关联分析与Apriori算法详解
数据挖掘|关联分析与Apriori算法 1. 关联分析2. 关联规则相关概念2.1 项目2.2 事务2.3 项目集2.4 频繁项目集2.5 支持度2.6 置信度2.7 提升度2.8 强关联规则2.9 关联规则的分类 3. Apriori算法3.1 Apriori算法的Python实现3.2 基于mlxtend库的Apriori算法的Python实现 1. 关联分…...
ChatGPT Excel 大师
原文:ChatGPT Excel Mastery 译者:飞龙 协议:CC BY-NC-SA 4.0 序言 欢迎来到 Excel 掌握的变革之旅,在这里,尖端技术和永恒专业知识在“ChatGPT Excel 掌握:释放专家技巧和窍门的力量”中融合。在当今快节…...
C 语言中的 end, _end 符号
使用 man 3 end 可以看到相关符号的解释 这些符号不是在 C 语言文件和头文件中定义的,它们是 ld 在链接所有 .o 文件的时候自己添加的。 end 和 _end 的地址,就是最终程序的堆的起始地址 要打印它们的话,一个样例程序在下面: …...
 
绿联 安装PDF工具
这是一个强大的本地托管的基于 Web 的 PDF 操作工具,使用 docker,允许您对 PDF 文件执行各种操作,例如拆分、合并、转换、重组、添加图像、旋转、压缩等。这个本地托管的 Web 应用程序最初是 100% ChatGPT 制作的应用程序,现已发展…...
 
备战蓝桥杯---数论相关问题
目录 一、最大公约数和最小公倍数 二、素数判断 三、同余 四、唯一分解定理 五、约数个数定理 六、约数和定理 五、快速幂 六、费马小定理 七、逆元 一、最大公约数和最小公倍数 文章链接:最大公约数和最小公倍数 二、素数判断 文章链接:在J…...
 
苹果手表Apple Watch录了两个半小时的录音,却只能播放4秒,同步到手机也一样,还能修复好吗?
好多人遇到这个情况,用苹果手表Apple Watch录音,有的录1个多小时,有的录了3、4小时,甚至更长时间,因为手表没电,忘记保存等原因造成录音损坏,都是只能播放4秒,同步到手机也一样&…...
 
RGB三通道和灰度值的理解
本文都是来自于chatGPT的回答!!! 目录 Q1:像素具有什么属性?Q2:图像的色彩是怎么实现的?Q3:灰度值和颜色值是一个概念吗?Q4:是不是像素具有灰度值,也有三个颜色分量RGB?Q5:灰度图像是没有色彩的吗?Q6: 彩色图像是既具有灰度值也具有RGB三…...
 
ARM、X86、RISC-V三分天下
引入: 简单的介绍一下X86、ARM、RISC-V三种cpu架构的区别和应用场景。 目录 简单概念讲解 1. X86架构 2. ARM架构 3. RISC-V架构 应用场景 X86、ARM和RISC-V是三种不同的CPU架构,它们在设计理念、指令集和应用场景上有一些区别。 简单概念讲解 1. X…...
 
力控机器人原理及力控制实现
力控机器人原理及力控制实现 力控机器人是一种能够感知力量并具有实时控制能力的机器人系统。它们可以在与人类进行精准协作和合作时,将力传感技术(Force Sensing Technology)和控制算法(Control Algorithm)结合起来&a…...
最小生成树
最小生成树问题是指给定一个带权的无向图,删除一些边使得这个无向图变成一棵树,并且权值之和最小。 解决此类问题的方法主要有两种:Prim算法,Kruskal算法 Prim 算法 从一个点开始,逐步扩展,每次选择权值…...
 
二维动画制作软件 Animate 2024 for mac激活版
Animate 2024 for Mac是一款功能强大的二维动画制作软件,专为Mac用户打造。它提供了丰富的动画编辑功能,使用户能够轻松创建出生动逼真的动画作品。无论是短片、广告还是游戏等应用领域,Animate 2024都能发挥出出色的表现。 软件下载…...
相对论中关于光速不变理解的补充
近几个月在物理直播间聊爱因斯坦相对论,发现好多人在理解爱因斯坦相对论关于基本假设,普遍认为光速是不变的,质能方程 中光速的光速不变的,在这里我对这个假设需要做一个补充,他是基于质能方程将光速C 在真是光速变化曲…...
 
面试(04)————JavaWeb
1、网络通讯部分 1.1、 TCP 与 UDP 区别? 1.2、什么是 HTTP 协议? 1.3、TCP 的三次握手,为什么? 1.4、HTTP 中重定向和请求转发的区别? 1.5、 Get 和 Post 的区别? 2、cookie 和 session 的区别&am…...
ES6从入门到精通:前言
ES6简介 ES6(ECMAScript 2015)是JavaScript语言的重大更新,引入了许多新特性,包括语法糖、新数据类型、模块化支持等,显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
蓝桥杯 冶炼金属
原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...
 
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
 
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
 
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
32单片机——基本定时器
STM32F103有众多的定时器,其中包括2个基本定时器(TIM6和TIM7)、4个通用定时器(TIM2~TIM5)、2个高级控制定时器(TIM1和TIM8),这些定时器彼此完全独立,不共享任何资源 1、定…...
 
2.3 物理层设备
在这个视频中,我们要学习工作在物理层的两种网络设备,分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间,需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质,假设A节点要给…...
《Offer来了:Java面试核心知识点精讲》大纲
文章目录 一、《Offer来了:Java面试核心知识点精讲》的典型大纲框架Java基础并发编程JVM原理数据库与缓存分布式架构系统设计二、《Offer来了:Java面试核心知识点精讲(原理篇)》技术文章大纲核心主题:Java基础原理与面试高频考点Java虚拟机(JVM)原理Java并发编程原理Jav…...
虚幻基础:角色旋转
能帮到你的话,就给个赞吧 😘 文章目录 移动组件使用控制器所需旋转:组件 使用 控制器旋转将旋转朝向运动:组件 使用 移动方向旋转 控制器旋转和移动旋转 缺点移动旋转:必须移动才能旋转,不移动不旋转控制器…...
