【Python从入门到进阶】55、使用Python轻松操作Mysql数据库

一、引言

1、MySQL数据库简介

MySQL是一个开源的关系型数据库管理系统(RDBMS),它使用了一种名为Structured Query Language(SQL)的查询语言来管理数据。MySQL因其高性能、可扩展性、易用性和稳定性而广受欢迎,成为全球最受欢迎的数据库之一。

在现代应用开发中,数据库扮演了至关重要的角色,因为它们可以高效地存储、检索、管理和更新数据。对于需要处理大量数据的项目,如网站、移动应用、数据分析等,MySQL提供了强大的支持。此外,MySQL还提供了丰富的API和工具,使得开发者能够轻松地与数据库进行交互。

2、Python对数据库操作优势

Python是一种解释型、高级编程、通用编程语言,以其简洁易读、语法清晰、功能强大而著称。在数据库操作方面,Python具有显著的优势。

首先,Python拥有丰富的数据库接口库,如mysql-connector-python、PyMySQL、SQLAlchemy等,这些库提供了与MySQL数据库交互的API,使得Python开发者能够轻松地进行数据库连接、查询、插入、更新和删除等操作。

其次,Python的语法简洁明了,易于学习和使用。这使得开发者能够快速地编写出高效、可靠的数据库操作代码。同时,Python的面向对象特性也使得开发者能够方便地组织和管理代码,提高开发效率。

此外,Python还具有强大的数据处理和分析能力。它提供了丰富的数据处理库和工具,如NumPy、Pandas等,这些库可以与数据库操作库配合使用,使得开发者能够方便地进行数据分析和数据挖掘。

二、准备工作

1、安装MySQL数据库(可选,针对没有安装MySQL的读者)

这里不再赘述,没有安装Mysql的童鞋,可参考官方文档进行安装。

2、安装Python的MySQL连接库

这里我们选择使用mysql-connector-python驱动进行mysql的链接。
mysql-connector-python是一个由MySQL官方提供的Python数据库驱动,它允许Python开发者无缝地与MySQL数据库进行交互。该库遵循DB-API 2.0规范(PEP 249),提供了全面的功能来连接、查询和管理MySQL数据库。以下是对mysql-connector-python的详细介绍:
(1)功能特点:

●连接管理:支持多种连接方式,包括TCP/IP、Unix套接字以及命名管道。
●数据类型转换:自动将Python对象(如字符串、整数和日期)转化为对应的MySQL数据类型,并将数据库返回的结果转化为Python对象,简化了数据操作。
●自动重连与事务处理:在网络中断或服务器重启时,能够自动重新建立连接,保证操作的连续性。同时,它支持事务处理,可以按需控制原子性和一致性。
●兼容性:不仅适用于标准的MySQL服务,还与MariaDB、Percona Server等兼容,拓展了它的应用范围。
●执行预编译语句:支持prepared statement,可提高性能并防止SQL注入攻击。

(2)安装:
使用pip可以轻松安装mysql-connector-python。在命令行中输入以下命令即可安装:

pip install mysql-connector-python

(3)使用示例:
以下是使用mysql-connector-python进行数据库操作的基本步骤:

●建立连接:通过mysql.connector.connect()方法建立与MySQL数据库的连接,需要指定主机名、用户名、密码和数据库名等参数。
●创建游标:使用连接对象的cursor()方法创建一个游标对象,用于执行SQL语句和获取结果。
●执行SQL语句:通过游标的execute()方法执行SQL语句,可以是查询语句(如SELECT)或非查询语句(如INSERT、UPDATE、DELETE)。
●获取结果:对于查询语句,可以使用游标的fetchone()、fetchall()或fetchmany()方法获取查询结果。
●关闭游标和连接:使用游标的close()方法和连接的close()方法关闭游标和连接,释放资源。

(4)优点:

●官方支持:由MySQL官方提供,保证了与MySQL数据库的兼容性和稳定性。
●简单易用:提供了简洁明了的API,使得开发者能够轻松地进行数据库操作。
●功能全面:支持连接管理、数据类型转换、事务处理等多种功能,满足开发者在数据库操作中的各种需求。
●安全性高:支持SSL加密连接和预编译语句,保证了数据传输的安全性和防止SQL注入攻击。

三、连接到MySQL数据库

我们先在Mysql中创建一个测试数据库和测试表,如下图:

在进行数据库操作之前,首先需要与MySQL数据库建立连接。mysql-connector-python库提供了与MySQL数据库建立连接的功能,下面将详细介绍如何使用mysql-connector-python连接到MySQL数据库。

1. 导入mysql.connector模块

要使用mysql-connector-python连接到MySQL数据库,首先需要导入mysql.connector模块。在Python脚本的开头添加以下代码:
import mysql.connector

2. 创建数据库连接

使用mysql.connector.connect()函数可以创建一个到MySQL数据库的连接。该函数接受一系列参数,用于指定连接数据库所需的信息。以下是一个示例:

cnx = mysql.connector.connect(
    host="localhost",  # 数据库服务器地址,如果数据库在本地,则为localhost
    user="root",  # 数据库用户名
    password="1234",  # 数据库密码
    database="test"  # 要连接的数据库名  
)

在这个示例中,你需要将host、user、password和database替换为你自己的数据库信息。

3. 创建游标对象

一旦建立了数据库连接,你就可以创建一个游标对象来执行SQL语句和获取结果。游标对象是通过连接对象的cursor()方法创建的:

cursor = cnx.cursor()

游标对象在后续的查询、插入、更新和删除操作中扮演着重要的角色。

4. 关闭连接与游标

完成数据库操作后,应该关闭游标和连接以释放资源。使用游标对象的close()方法和连接对象的close()方法可以关闭它们:

cursor.close()  
cnx.close()

在实际应用中,为了处理可能出现的异常,通常会使用try...except...finally结构来确保资源被正确释放:

import mysql.connector  
  
try:  
    cnx = mysql.connector.connect(  
        host="localhost",  
        user="yourusername",  
        password="yourpassword",  
        database="yourdatabase"  
    )  
    cursor = cnx.cursor()  
  
    # 执行SQL语句  
    # ...  
  
except mysql.connector.Error as err:  
    print(f"Error: '{err}'")  
  
finally:  
    if cnx.is_connected():  
        cursor.close()  
        cnx.close()  
        print("MySQL connection is closed")

在上面的示例中,如果发生任何异常,将捕获mysql.connector.Error并打印错误信息。最后,在finally块中,检查连接是否仍然打开,并关闭游标和连接。这样,无论是否发生异常,都能确保资源被正确释放。
效果:

四、执行SQL语句

在成功连接到MySQL数据库后,下一步就是执行SQL语句来查询、插入、更新或删除数据。mysql-connector-python库提供了游标对象(cursor)来执行这些操作。下面将详细介绍如何使用游标对象来执行SQL语句。

1. 执行查询语句

要执行查询语句(如SELECT),可以使用游标对象的execute()方法。该方法接受一个SQL语句作为参数,并执行它。查询的结果可以通过游标的fetchone()、fetchall()或fetchmany()方法获取。

以下是一个简单的示例,演示如何执行查询语句并获取结果:

import mysql.connector  
  
# 连接到数据库(此处省略连接代码)  
  
try:  
    cursor = cnx.cursor()  
  
    # 执行查询语句  
    query = "SELECT * FROM users"  
    cursor.execute(query)  
  
    # 获取所有结果  
    results = cursor.fetchall()  
  
    # 处理结果(例如,打印出来)  
    for row in results:  
        print(row)  
  
except mysql.connector.Error as err:  
    print(f"Error: '{err}'")  
  
finally:  
    # 关闭游标和连接(此处省略关闭代码)

效果(我提前已在数据库插入一条name为“杰克”的数据):

在上面的示例中,users应该替换为你想要查询的实际表名。fetchall()方法会返回一个包含所有查询结果的列表,其中每个元素都是一个表示一行的元组。你可以遍历这个列表来处理每一行的数据。

2. 执行插入、更新和删除语句

对于插入(INSERT)、更新(UPDATE)和删除(DELETE)语句,也可以使用游标对象的execute()方法来执行。这些语句不需要获取结果,因此通常不需要调用fetchone()、fetchall()或fetchmany()方法。

以下是一个示例,演示如何执行插入语句:

import mysql.connector  
  
# 连接到数据库(此处省略连接代码)  
  
try:  
    cursor = cnx.cursor()  
  
    # 执行插入语句  
    insert_query = "INSERT INTO users (name, age, email, address) VALUES (%s, %s, %s, %s)"  
    data = ("海丽", 22, "Haili@126.com", "湖南省长沙市")  
    cursor.execute(insert_query, data)  
  
    # 提交事务(如果需要的话)  
    cnx.commit()  
  
except mysql.connector.Error as err:  
    print(f"Error: '{err}'")  
  
    # 如果发生错误,回滚事务(如果需要的话)  
    if cnx.is_connected():  
        cnx.rollback()  
  
finally:  
    # 关闭游标和连接(此处省略关闭代码)

在上面的示例中,users应该替换为你想要插入数据的实际表名,name、age等应该替换为表中的列名。%s是参数占位符,用于表示要插入的实际数据。data是一个包含要插入数据的元组。
执行后,我们去数据库查看,可以看到数据已经成功插入:

然后执行更新的语句:

# 更新(UPDATE)操作
update_query = "UPDATE users SET age = %s WHERE name = %s"
update_data = (18, "海丽")  # 假设我们要更新name为'海丽'的记录
cursor.execute(update_query, update_data)
print("数据更新成功!") 

# 提交事务 
cnx.commit()  

执行后,我们去数据库查看,可以看到数据已经成功更新:

然后执行删除的语句:

# 删除(DELETE)操作  
delete_query = "DELETE FROM your_table_name WHERE column1 = %s"  
delete_data = ("value1",)  # 假设我们要删除column1为'value1'的记录  
cursor.execute(delete_query, delete_data)  
print("数据删除成功!")  

# 提交事务 
cnx.commit()  

执行后,我们去数据库查看,可以看到数据已经成功删除:

请注意,在执行插入、更新或删除语句后,可能需要提交事务以确保更改被保存到数据库中。如果发生错误,你可能还需要回滚事务以撤销更改。在上面的示例中,我们使用了cnx.commit()来提交事务,并在捕获到异常时使用cnx.rollback()来回滚事务(如果连接仍然打开的话)。

最后,请确保在完成数据库操作后关闭游标和连接,以释放资源并断开与数据库的连接。

至此,Python链接Mysql操作的基础讲解介绍完毕,下一篇我们来介绍链接Mysql时参数化查询与防止SQL注入以及使用ORM(对象关系映射)库简化操作的内容。

转载请注明出处:https://guangzai.blog.csdn.net/article/details/139212596

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

<商务世界>《75 微课堂<茶叶(1)-质量分级>》

1 中国茶叶分级 中国的10级标准是按照茶叶的外观、香气、滋味、汤色、叶底五个方面进行评分,分别用10分制进行评分,总分为50分,得分越高,茶叶的品质就越高。具体的分数和等级如下表所示: 2 每级的特点 茶叶的质量等级…

zabbix“专家坐诊”第240期问答

问题一 Q:zabbix6.0版本,配置报警媒介里的message 消息时,操作数据参数EVENT.OPDATA调用的参数是哪个? A:参考 问题二 Q:请问告警为什么只有关闭之前的告警,才会生成新的告警? A&a…

如何用ai打一场酣畅淋漓的数学建模比赛? 给考研加加分!

文章目录 数学建模比赛1. 数学建模是什么?2. 数学建模分工合作2.1 第一:组队和分工合作2.2 第二:充分的准备2.3 第三:比赛中写论文过程 3. 数学建模基本过程4. 2023全年数学建模竞赛时间轴5. 数学建模-资料大全6. 数学建模实战 数…

C++的类和对象

C面向对象的三大特性:封装,继承,多态 万事万物皆可为对象,有其相应的属性和行为 一、封装 1.1 封装的意义 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制 在设计类的时候,属性…

ROS参数服务器

一、介绍 参数服务器是用于存储和检索参数的分布式多机器人配置系统,它允许节点动态地获取参数值。 在ROS中,参数服务器是一种用于存储和检索参数的分布式多机器人配置系统。它允许节点动态地获取参数值,并提供了一种方便的方式来管理和共享配…

【智能算法应用】模拟退火算法求解多车型车辆路径问题HFVRP

目录 1.算法原理2.多车型车辆路径HFVRP数学模型3.结果展示4.参考文献5.代码获取 1.算法原理 模拟退火算法(Simulated Annealing, SA)是一种通用概率算法,用于在给定一个大的搜索空间内寻找问题的近似最优解。这种算法受到物理中退火过程的启…

Jenkins + github 自动化部署配置

1 Jenkins安装 AWS EC2安装Jenkins:AWS EC2 JDK11 Jenkins-CSDN博客 AWS EC2上Docker安装Jenkins:https://blog.csdn.net/hhujjj2005/article/details/139078402 2 登录jenkins http://192.168.1.128:8080/ $ docker exec -it d1851d9e3386 /bin/ba…

【MySQL】库的基础操作

🌎库的操作 文章目录: 库的操作 创建删除数据库 数据库编码集和校验集 数据库的增删查改       数据库查找       数据库修改 备份和恢复 查看数据库连接情况 总结 前言:   数据库操作是软件开发中不可或缺的一部分&#xff0…

labelme语义分割标注

参考:同济子豪兄 https://github.com/TommyZihao/MMSegmentation_Tutorials GitHub - TommyZihao/Train_Custom_Dataset: 标注自己的数据集,训练、评估、测试、部署自己的人工智能算法 下载安装Labelme Labelme主页:https://github.com/wke…

linux开放某一个端口具体步骤

场景:当服务器防火墙不能直接关闭,但是客户端必须要访问服务器某一个端口时。 处理:对服务器端进行处理,只将该端口开放出来让客户端访问 本地使用vm安装了一个centos服务器,ip地址是 192.168.200.130。在这里充当服…

考研数学|线代跟谁好,李永乐,汤家凤还是张宇?

如果线代基础不好,那建议开刚开始的时候听汤家凤老师的线代课程 汤家凤教授的线性代数课程常被忽视,多数人倾向于去听李永乐。然而,在我考研的过程中,我曾尝试听李永乐教老师的课,可能是由于我自身基础薄弱&#xff0…

vscode远程连接Ubuntu mysql服务器

注意:刚开始使用root用户死活连接不上,可能就是root用户没有权限的问题,可以尝试创建一个新的数据库用户,授予权限进行连接 ubuntu安装mysql 创建新用户 执行:sudo apt-get install mysql-server安装服务器(yum) 执…

Intel HDSLB 高性能四层负载均衡器 — 基本原理和部署配置

目录 文章目录 目录前言HDSLB-DPVS 的基本原理LVSDPDKDPVSHDSLB-DPVS HDSLB 的部署配置硬件要求软件要求编译安装 DPDK编译安装 HDSLB-DPVS配置大页内存配置网卡配置 HDSLB-DPVS启动 HDSLB-DPVS 测试 HDSLB-DPVS Two-arm Full-NAT 模式问题分析最后 前言 在上一篇《Intel HDSL…

TCP/IP协议(一)

一.报文和协议 协议有什么作用?协议定义通信实体间所交换报文的格式和次序,以及在报文发送和/或接收或者其他事件方面所采取的行动(响应)。 什么是报文?指在网络中传输的数据单元,网络通讯的基本单位。(HTTP报文、TCP报…

【C语言】10.C语言指针(1)

文章目录 1.内存和地址1.1 内存1.2 究竟该如何理解编址 2.指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引⽤操作符(*)2.2.1 指针变量2.2.2 如何拆解指针类型2.2.3 解引⽤操作符 2.3 指针变量的⼤⼩ 3.指针变量类型的意…

中科蓝讯AB32VG1中文寄存器说明GPIO端口操作

1 GPIO管理 1.1 GPIO通用控制寄存器 寄存器 1- 1 GPIOA:端口 A 数据寄存器 位寄存器名模式缺省描述31:8---未使用7:0GPIOA写0x00PAx 数据。当 PAx 用作 GPIO 时有效 0:读取时PAx为输入低电平状态,写入时PAx为输出低电平; 1:PAx…

中间件-------RabbitMQ

同步和异步 异步调用 MQ MQ优势:①服务解耦 ②异步调用 ③流量削峰 结构 消息模型 RabbitMQ入门案例,实现消息发送和消息接收 生产者: public class PublisherTest {Testpublic void testSendMessage() throws IOException, TimeoutExce…

【Text2SQL 论文】SeaD:使用 Schema-aware 去噪训练的 end2end 的 Text2SQL

论文:SeaD: End-to-end Text-to-SQL Generation with Schema-aware Denoising ⭐⭐ NAACL 2022, arXiv:2105.07911 本论文提出 SeaD 模型,使用 schema-aware 的去噪方法来训练一个 end2end、seq2seq 的 Transformer 模型来实现 Text2SQL。 一、论文速读…

[vue error] vue3中使用同名简写报错 ‘v-bind‘ directives require an attribute value

错误详情 错误信息 ‘v-bind’ directives require an attribute value.eslintvue/valid-v-bind 错误原因 默认情况下,ESLint 将同名缩写视为错误。此外,Volar 扩展可能需要更新以支持 Vue 3.4 中的新语法。 解决方案 更新 Volar 扩展 安装或更新 …

Springboot集成GRPC

Springboot集成GRPC 一、springboot版本二、GRPC的pom依赖2.1 服务端2.2 客户端3.构建依赖 三、配置文件服务端客户端 四、 demo4.1 编写proto文件4.2 生成文件4.3 服务端重写方法4.4 客户端调用该方法 五、测试 一、springboot版本 <groupId>org.springframework.boot&l…