【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",  # 数据库服务器地址,如果数据库在本地,则为localhostuser="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

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

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

相关文章

ARM+FPGA+NVIDIA AI摄像头软硬件定制

拥有资深ISP图像技术团队,是英伟达、地平线等合作伙伴,我们的团队掌握目前市面上大部分车载平台的ISP图像画质服务能力,能自主开发图像ISP和增强算法。我们具有多名经验丰富光学设计专家,掌握车载模组光学设计能力,资深…

入门五(项目介绍及登录需求)

软件缺陷判定标准 项目中缺陷的管理流程 使用Excel对于缺陷进行管理 使用工具管理缺陷 一、项目背景 传智作为一个IT教育机构,拥有自己开发且实际运营的产品; 将开发和运营的技术作为授课的内容,对于学员而言学到的都是一手的真实案例和…

类的继承和方法重载

想象一下,有一个相亲想爱的一家人家族树。在这个家族树中,有一个祖先(父类),它拥有一些基本的特征和行为,比如家族的传统、姓氏、某些共同的技能或知识。 现在,这个祖先有多个后代(…

vivado 设计连接性

设计连接性 IP集成商提供设计师协助,帮助您完成连接过程 设计。图3显示了MHS的一个示例,图4显示了设计帮助 可在IP集成商中获得 地址映射 在XPS中,无论主机访问从机IP,每个从机都有相同的地址。IP integrator为基于master的寻址提…

【C++课程学习】:命名空间的理解(图文详解)

🎁个人主页:我们的五年 🔍系列专栏:C课程学习 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 📷1.命名冲突 📷2.重定义 📷3.命名空间 🍺命名空间可…

Leetcode刷题笔记3

18. 四数之和 18. 四数之和 - 力扣(LeetCode) 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应&…

解决Element组件el-switch在Vue中值的绑定与回显问题

概要 Switch 开关表示两种相互对立的状态间的切换,多用于触发「开/关」。可当一个布尔值进行使用。 问题描述与解决 引入Element组件的switch到Vue中,可以读取switch的值,但如果放在页面中,不能回显上去。 如上图,无论值是"否"还是“是”。都不能正确渲染到页…

vue-officef实现pdf文件在线预览

一、参考网址 https://www.cnblogs.com/guozhiqiang/p/17957288 1、引入依赖 npm install vue-office/pdf vue-demi2、编写组件 <template><vue-office-pdf :src"pdf"/> </template> <script> // import pdf from vue-pdf import VueOffice…

基于长短期记忆网络 LSTM 的送餐时间预测

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…

实战13:lstm bp 机器学习随机森林粮食产量预测-完整代码数据

直接看视频: lstm bp 机器学习随机森林粮食产量预测-完整代码数据_哔哩哔哩_bilibili 看数据: 代码: from sklearn.linear_model import LinearRegression from sklearn import preprocessing import random from sklearn.model_selection import train_test_split from…

postgresql|数据库|闪回插件e-maj的部署和使用

前言&#xff1a; E-Maj 是 PostgreSQL 数据库的一个扩展插件&#xff0c;它的全称为 "Elementary Majordomo"。这个扩展的主要功能是为数据库中的表集提供细粒度的写入日志记录和时间旅行能力。这意味着使用 E-Maj 的用户可以在数据库的特定子集上实现事务的回滚&a…

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记

C++笔记之Unix时间戳、UTC、TSN、系统时间戳、时区转换、local时间笔记 ——2024-05-26 夜 code review! 参考博文 C++笔记之获取当前本地时间以及utc时间

Linux定时计划

定时计划 一、计划任务种类 突发性&#xff1a;临时决定只执行一次的任务 at&#xff1a;处理执行一次任务就结束定时性&#xff1a;每隔一定时间需要重复执行此命令 crontab&#xff1a;指定任务&#xff0c;按照设定的周期一直循环执行二、作用 定时任务可以用于自动备份…

TCP/IP协议(一)

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

链式二叉树的前,中,后序遍历 AND 结点个数及高度等 文末附带全部代码

目录 前言1. 前序遍历2. 中序遍历3. 后续遍历4. 二叉树结点的个数5. 二叉树叶子结点个数6. 二叉树的高度7. 二叉树第K层结点的个数8. 二叉树查找值为x的结点全部代码总结 正文开始 前言 本文旨在介绍二叉树的链式存储中一些函数的实现 博客主页: 酷酷学!!! 更多文章, 期待关…

01主动安全系统

“安全”一直是车主对车辆考核的重要指标。车辆安全可以分为从主动安全和被动安全两个方面进行分类。今天就来说说汽车主动安全系统的那些事儿。 01.什么是主动安全系统&#xff1f; 主动安全是指尽量自如地操纵控制汽车的安全系统措施。无论是直线上的制动与加速还是左右打方…

【调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve】

调试笔记-系列文章目录 调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 文章目录 调试笔记-系列文章目录调试笔记-20240526-Linux-在 OpenWrt-23.05 发行版上安装 cloudreve 前言一、调试环境操作系统&#xff1a;Windows 10 专业版调试环境调试目标 二、调…

RTOS(3)极简ARM架构与汇编

1.掌握八条汇编指令即可 读内存loadLDR R0&#xff0c;[addrA]写内存storeSTR R0&#xff0c;[addrA]加ADD R0&#xff0c;R1&#xff0c;R2减SUB R0&#xff0c;R1&#xff0c;R2比较CMP R0&#xff0c;R1跳转B / BL入栈PUSH { R3&#xff0c;LR }出…

网络原理-以太网协议和DNS协议

一、以太网协议 以太网协议会涉及到数据链路层和物理层。 如图&#xff1a; 这里面的目的地址和源地址指的并不是IP地址,而是MAC地址(物理地址)。长度为6个字节。即最多能表示2^48 个地址,也是非常大的,足够给全球每个设备都分配一个地址,因此在网卡出厂的时候都会带有一个唯…

力扣刷题--2176. 统计数组中相等且可以被整除的数对【简单】

题目描述 给你一个下标从 0 开始长度为 n 的整数数组 nums 和一个整数 k &#xff0c;请你返回满足 0 < i < j < n &#xff0c;nums[i] nums[j] 且 (i * j) 能被 k 整除的数对 (i, j) 的 数目 。 示例 1&#xff1a; 输入&#xff1a;nums [3,1,2,2,2,1,3], k …