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

news2024/11/16 8:34:31

一、引言

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

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

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

相关文章

【论文复现】LSTM长短记忆网络

LSTM 前言网络架构总线遗忘门记忆门记忆细胞输出门 模型定义单个LSTM神经元的定义LSTM层内结构的定义 模型训练模型评估代码细节LSTM层单元的首尾的处理配置Tensorflow的GPU版本 前言 LSTM作为经典模型,可以用来做语言模型,实现类似于语言模型的功能&am…

数据结构:树(3)【二叉树链式结构实现】【二叉树的前序,中序,后序遍历】【求二叉树全部结点个数】【求二叉树叶子结点个数】【求二叉树的深度】【单值二叉树】

一.二叉树链式结构的实现 二叉树的链式结构的实现相对于顺序结构的实现就没有那么多的讲究了。就是普通的链表,只不过多了一个指向的指针。 具体结构如下: typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

云计算和大数据处理

文章目录 1.云计算基础知识1.1 基本概念1.2 云计算分类 2.大数据处理基础知识2.1 基础知识2.3 大数据处理技术 1.云计算基础知识 1.1 基本概念 云计算是一种提供资源的网络,使用者可以随时获取“云”上的资源,按需求量使用,并且可以看成是无…

一.架构设计

架构采用 ddd 架构,不同于传统简单的三层的架构,其分层的思想对于大家日后都是很有好处的,会给大家的思想层级,提高很多。 传统的项目 现有的架构 采取ddd架构,给大家在复杂基础上简化保留精髓,一步步进行…

以太坊钱包

以太坊钱包是你通往以太坊系统的门户。它拥有你的密钥,并且可以代表你创建和广播交易。选择一个以太坊钱包可能很困难,因为有很多不同功能和设计选择。有些更适合初学者,有些更适合专家。即使你现在选择一个你喜欢的,你可能会决定…

游戏找不到d3dcompiler_43.dll怎么办,教你5种可靠的修复方法

在电脑使用过程中,我们经常会遇到一些错误提示,其中之一就是“找不到d3dcompiler43.dll”。这个问题通常出现在游戏或者图形处理软件中,它会导致程序无法正常运行。为了解决这个问题,我经过多次尝试和总结,找到了以下五…

粤嵌—2024/5/23—不同路径 ||(✔)

代码实现&#xff1a; int uniquePathsWithObstacles(int **obstacleGrid, int obstacleGridSize, int *obstacleGridColSize) {int x obstacleGridSize, y obstacleGridColSize[0];int dp[x][y];memset(dp, 0, sizeof(int) * x * y);for (int j 0; j < y && obs…

OpenUI 可视化 AI:打造令人惊艳的前端设计!

https://openui.fly.dev/ai/new 可视化UI的新时代&#xff1a;通过人工智能生成前端代码 许久未更新, 前端时间在逛github&#xff0c;发现一个挺有的意思项目&#xff0c;通过口语化方式生成前端UI页面&#xff0c;能够直观的看到效果&#xff0c;下面来给大家演示下 在现代…

智能家居完结 -- 整体设计

系统框图 前情提要: 智能家居1 -- 实现语音模块-CSDN博客 智能家居2 -- 实现网络控制模块-CSDN博客 智能家居3 - 实现烟雾报警模块-CSDN博客 智能家居4 -- 添加接收消息的初步处理-CSDN博客 智能家居5 - 实现处理线程-CSDN博客 智能家居6 -- 配置 ini文件优化设备添加-CS…

复习java5.26

面向对象和面向过程 面向过程&#xff1a;把一个任务分成一个个的步骤&#xff0c;当要执行这个任务的时候&#xff0c;只需要依次调用就行了 面向对象&#xff1a;把构成任务的事件构成一个个的对象&#xff0c;分别设计这些对象&#xff08;属性和方法&#xff09;、然后把…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据安全不容小觑:.hmallox勒索病毒的防范与应对

一、引言 随着网络技术的飞速发展&#xff0c;网络安全问题日益凸显&#xff0c;其中勒索病毒作为一种极具破坏性的网络攻击手段&#xff0c;已在全球范围内造成了巨大的经济损失和社会影响。在众多勒索病毒中&#xff0c;.hmallox勒索病毒以其狡猾的传播方式和强大的加密能力…

27【Aseprite 作图】盆栽——拆解

1 橘子画法拆解 (1)浅色3 1 0;深色0 2 3 就可以构成一个橘子 (2)浅色 2 1;深色1 0 (小个橘子) (3)浅色 2 1 0;深色1 2 3 2 树根部分 (1)底部画一条横线 (2)上一行 左空2 右空1 【代表底部重心先在右】 (3)再上一行,左空1,右空1 (4)再上一行,左突出1,…

L01_JVM 高频知识图谱

这些知识点你都掌握了吗&#xff1f;大家可以对着问题看下自己掌握程度如何&#xff1f;对于没掌握的知识点&#xff0c;大家自行网上搜索&#xff0c;都会有对应答案&#xff0c;本文不做知识点详细说明&#xff0c;只做简要文字或图示引导。 类的生命周期 类加载器 JVM 的内存…

汽车IVI中控开发入门及进阶(二十):显示技术之LCDC

TFT LCD=Thin Film Transistor Liquid Crystal Display LCDC=LCD Controller 薄膜晶体管液晶显示器(TFT LCD)控制器在驱动现代显示技术的功能和性能方面起着关键作用。它们充当屏幕后面的大脑,仔细处理数字信号,并将其转化为精确的命令,决定每个像素的行为,决定它们的…

数据库系统概论(第5版)复习笔记

笔记的Github仓库地址 &#x1f446;这是笔记的gihub仓库&#xff0c;内容是PDF格式。 因为图片和代码块太多&#xff0c;放到CSDN太麻烦了&#xff08;比较懒&#x1f923;&#xff09; 如果感觉对各位有帮助的话欢迎点一个⭐\^o^/

Unity 生成物体的几种方式

系列文章目录 unity工具 文章目录 系列文章目录前言&#x1f449;一、直接new的方式创建生成1-1.代码如下1-2. 效果图 &#x1f449;二、使用Instantiate创建生成&#xff08;GameObject&#xff09;2-1.代码如下2-2.效果如下图 &#x1f449;三.系统CreatePrimitive创建生成3…

C++编程揭秘:虚表机制与ABI兼容性的实例剖析

前言&#xff1a; 假设你的应用程序引用的一个库某天更新了&#xff0c;虽然 API 和调用方式基本没变&#xff0c;但你需要重新编译你的应用程序才能使用这个库&#xff0c;那么一般说这个库是源码兼容&#xff08;Source compatible&#xff09;&#xff1b;反之&#xff0c;如…

BGP策略实验(路径属性和选路规则)

要求&#xff1a; 1、使用preval策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2、使用AS Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略&#xff0c;确保R1通过R2到达19…

不同网段的通信过程

这里的AA和HH指的是mac地址&#xff0c;上面画的是路由器 底下的这个pc1&#xff0c;或者其他的连接在这里的pc&#xff0c;他们的默认网关就是路由器的这个192.168.1.1/24这个接口 来看看通信的过程 1、先判断&#xff08;和之前一样&#xff09; 2、去查默认网关&#xf…