Python 数据库(一):使用 mysql-connector-python 操作 MySQL 数据库

在这里插入图片描述
大家好,我是水滴~~

当涉及到使用 Python 操作 MySQL 数据库时,mysql-connector-python 库是一个强大而常用的选择。该库提供了与 MySQL 数据库的交互功能,使您能够执行各种数据库操作,如连接数据库、执行查询和插入数据等。在本文中,我们将介绍如何使用 mysql-connector-python 库来操作 MySQL 数据库。

文章内容包含大量的示例代码,希望能够帮助新手同学快速入门。

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 前言
  • 一、连接器的版本
  • 二、安装 mysql-connector-python 库
  • 三、连接 MySQL 数据库
    • 3.1 创建一个连接
    • 3.2 使用字典定义连接参数
    • 3.3 从配置文件中获取连接信息
    • 3.4 捕获连接异常
  • 四、执行 SQL 查询
    • 4.1 查询并返回多条数据(元组列表)
    • 4.2 查询并返回一条数据(元组)
    • 4.3 查询时传递参数
  • 五、执行 SQL 插入、更新和删除操作
  • 六、支持事务
  • 七、支持连接池
  • 总结


前言

MySQL Connector/Python 是一个用于在 Python 和 MySQL 数据库之间进行交互的官方 MySQL 驱动程序。它提供了一个简单而强大的接口,使开发人员能够轻松地连接到 MySQL 数据库,并执行查询、插入、更新和删除等操作。

以下是 MySQL Connector/Python 库的一些关键特点和功能:

  • 官方支持:MySQL Connector/Python 是由 MySQL 官方团队开发和维护的,因此它与 MySQL 数据库的兼容性非常好。它遵循最新的 MySQL 协议,并与 MySQL 服务器紧密集成。
  • 简单易用:MySQL Connector/Python 提供了一个直观而简单的 API,使开发人员能够轻松地连接到数据库、执行查询和修改数据。它提供了一组简洁的方法和函数,使数据库操作变得简单而直观。
  • 支持事务:MySQL Connector/Python 支持事务,允许您在多个数据库操作之间维护一致性。您可以开始一个事务、执行一系列操作,并在需要时提交或回滚事务。
  • 支持预处理语句:MySQL Connector/Python 支持预处理语句,可以提高执行相同查询多次的效率。通过使用预处理语句,您可以预先准备查询并多次执行,而不必每次都重新解析和编译查询。
  • 支持连接池:MySQL Connector/Python 支持连接池,允许您在应用程序中管理和重用数据库连接。连接池可以提高性能和可伸缩性,特别是在高并发环境下。
  • SSL/TLS 加密支持:MySQL Connector/Python 支持通过 SSL/TLS 使用加密连接连接到 MySQL 服务器。这提供了对数据传输的安全保护,尤其在通过公共网络连接到数据库时非常重要。
  • 跨平台支持:MySQL Connector/Python 可在多个平台上运行,包括 Windows、Linux 和 macOS。这使得它成为开发人员在不同环境中构建和部署 Python 应用程序时的理想选择。

总之,MySQL Connector/Python 是一个功能强大且易于使用的库,用于在 Python 和 MySQL 数据库之间进行交互。它提供了广泛的功能和选项,使开发人员能够灵活地连接、查询和修改 MySQL 数据库,从而构建出高效和可靠的应用程序。无论是简单的查询还是复杂的数据库操作,MySQL Connector/Python 都是一个值得考虑的工具。

下面是相关链接:

项目链接
官方指南https://dev.mysql.com/doc/connector-python/
PyPI 地址https://pypi.org/project/mysql-connector-python/

一、连接器的版本

在安装 MySQL 连接器之前需要先确定安装的版本,如果你的 MySQL 版本在 5.6 及以上,可以直接安装最新版本的连接器。

下表总结了连接器 与 MySQL、Python的版本对照表:

连接器版本MySQL 版本Python 版本
8.x8.1, 8.0, 5.7, 5.63.12 (8.2.0), 3.11, 3.10, 3.9, 3.8
8.08.0, 5.7, 5.6, 5.53.11, 3.10, 3.9, 3.8, 3.7, (在 8.0.29 之前的 3.6), ( 在 8.0.24 之前的 2.7 和 3.5)
2.2 (后续为 8.0)5.7, 5.6, 5.53.5, 3.4, 2.7
2.15.7, 5.6, 5.53.5, 3.4, 2.7, 2.6
2.05.7, 5.6, 5.53.5, 3.4, 2.7, 2.6
1.25.7, 5.6, 5.5 (5.1, 5.0, 4.1)3.4, 3.3, 3.2, 3.1, 2.7, 2.6

二、安装 mysql-connector-python 库

在使用之前,需要先安装 mysql-connector-python 库,下面列出一些常用的 pip 命令。

安装最新版本:

pip install mysql-connector-python

安装到指定版本:

pip install mysql-connector-python==8.0.26

请注意,确保指定的版本在PyPI(Python软件包索引)上可用。你可以在PyPI网站上搜索mysql-connector-python来查找可用的版本列表。

升级到最新版本:

pip install mysql-connector-python --upgrade

升级到指定版本:

pip install mysql-connector-python==8.0.26 --upgrade

三、连接 MySQL 数据库

使用 mysql-connector-python 库连接 MySQL 数据库,需要使用 connect() 函数,该函数会创建与 MySQL 服务器的连接并返回一个 MySQLConnection对象。

3.1 创建一个连接

以下示例展示了如何连接到 MySQL 服务器:

import mysql.connector# 连接 MySQL
cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database"
)# 关闭连接
cnx.close()

在上述代码中,host 表示数据库主机地址,user 表示用户名,password 表示密码,database 表示要连接的数据库名称。

3.2 使用字典定义连接参数

也可以将连接参数封装到字典中,然后以这个字典传递参数:

import mysql.connector# 将连接信息存入字典中
conn_params = {'host': 'your_host','user': 'your_username','password': 'your_password','database': 'your_database'
}# 使用 ** 运算符传递字典参数
cnx = mysql.connector.connect(**conn_params)# 关闭连接
cnx.close()

3.3 从配置文件中获取连接信息

在生产环境中,通常是将连接信息写在配置文件中的,需要从配置文件中获取,然后连接 MySQL。

创建一个配置文件(例如,config.ini),其中包含MySQL数据库的连接参数。配置文件的示例内容如下:

[mysql]
host = your_host
user = your_username
password = your_password
database = your_database

使用configparser模块来解析配置文件并获取连接参数。以下是示例代码:

import configparser
import mysql.connector# 创建配置解析器对象
config = configparser.ConfigParser()
# 读取配置文件
config.read('config.ini')# 从配置文件中获取连接参数,并封装至字典中
conn_params = {'host': config.get('mysql', 'host'),'user': config.get('mysql', 'user'),'password': config.get('mysql', 'password'),'database': config.get('mysql', 'database')
}# 连接到MySQL数据库
cnx = mysql.connector.connect(**conn_params)# 关闭连接
cnx.close()

3.4 捕获连接异常

在连接数据库时也可能因为意外而发生异常,我们需要捕获它:

import mysql.connector
from mysql.connector import errorcodetry:# 连接 MySQL 数据库cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database")# 捕获异常
except mysql.connector.Error as err:if err.errno == errorcode.ER_ACCESS_DENIED_ERROR:print("账号或密码错误")elif err.errno == errorcode.ER_BAD_DB_ERROR:print("数据库不存在")else:print(err)
else:# 关闭连接cnx.close()

获取更多连接参数,请参见官网:https://dev.mysql.com/doc/connector-python/en/connector-python-connectargs.html

四、执行 SQL 查询

连接成功后,可以使用 cursor() 函数获取游标对象,然后使用游标对象执行 SQL 查询。

4.1 查询并返回多条数据(元组列表)

下面示例将演示如何执行查询语句,并将查询结果放到列表中,代码如下:

import mysql.connector# 获取连接
cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database"
)# 获取游标
cursor = cnx.cursor()# 执行查询
cursor.execute("SELECT * FROM oss_file")# 将查询结果放到列表中
rows = cursor.fetchall()# 遍历查询结果
for row in rows:print(row)# 关闭游标和连接
cursor.close()
cnx.close()

在上述代码中,execute() 函数用于执行 SQL 查询,fetchall() 函数用于获取查询结果集,其返回值为列表,列表中存储的是元组,每个元组就是一条数据。

4.2 查询并返回一条数据(元组)

下面示例将演示如何执行查询语句,并返回一条查询结果,代码如下:

import mysql.connector# 获取连接
cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database"
)# 获取游标
cursor = cnx.cursor()# 执行查询
cursor.execute("SELECT * FROM oss_file limit 1")# 获取查询结果
row = cursor.fetchone()
print(row)# 关闭游标和连接
cursor.close()
cnx.close()

在上述代码中,execute() 函数用于执行 SQL 查询,fetchone() 函数用于获取一条查询结果,其返回值为元组。

4.3 查询时传递参数

执行查询时也可以进行参数传递,可以将参数组织为元组或列表,并将其作为execute()方法的第二个参数传递。以下是一个示例:

import mysql.connector# 获取连接
cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database"
)# 获取游标
cursor = cnx.cursor()# 查询参数,参数可以是元组或列表
params = ('app/', 1)
# 执行查询
cursor.execute("SELECT * FROM oss_file where prefix = %s and status = %s", params=params)# 将查询结果放到列表中
rows = cursor.fetchall()# 遍历查询结果
for row in rows:print(row)# 关闭游标和连接
cursor.close()
cnx.close()

上述示例中,传递了两个参数,而SQL中使用 %s 作为点位符,表示参数的位置 。在SQL查询语句中,%s占位符通常是按照出现的顺序进行参数替换的。当你在查询语句中使用多个%s占位符时,传递给数据库驱动程序的参数值应按照相应的顺序进行传递。

参数也可以是字典类型,如下示例:

import mysql.connector# 获取连接
cnx = mysql.connector.connect(host="localhost",user="root",password="root",database="oss"
)# 获取游标
cursor = cnx.cursor()# 定义字典类型的参数
params = {'prefix': 'app/','status': 1
}
# 执行查询
cursor.execute("SELECT * FROM oss_file where prefix = %(prefix)s and status = %(status)s", params=params)# 将查询结果放到列表中
rows = cursor.fetchall()# 遍历查询结果
for row in rows:print(row)# 关闭游标和连接
cursor.close()
cnx.close()

当传递字典类型的参数,占位符就需要指明具体的参数了,如上面的 %(prefix)s%(status)s

五、执行 SQL 插入、更新和删除操作

可以使用 execute() 函数来执行 SQL 插入、更新和删除操作。

示例代码如下:

import mysql.connector# 获取连接
cnx = mysql.connector.connect(host="your_host",user="your_username",password="your_password",database="your_database"
)# 获取游标
cursor = cnx.cursor()# SQL 语句和参数
sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
params = ("水滴", "青岛")# 执行插入语句
cursor.execute(sql, params)# 提交事务
cnx.commit()# 获取受影响的行数
print('插入行数', cursor.rowcount)# 关闭游标和连接
cursor.close()
cnx.close()

在上述代码中,execute() 函数用于执行 SQL 插入操作,commit() 函数用于提交事务。而更新、删除和插入是一样的,这里就不演示了。

六、支持事务

mysql-connector-python 库支持事务功能。可以使用 start_transaction() 函数开始一个事务,使用 commit() 函数提交事务,使用 rollback() 函数回滚事务。

示例代码如下:

import mysql.connector# 建立与数据库的连接
cnx = mysql.connector.connect(user='your_username',password='your_password',host='your_host',database='your_database'
)try:# 开始事务cnx.start_transaction()# 创建游标对象cursor = cnx.cursor()# 执行第一个插入操作insert_query1 = "INSERT INTO table1 (column1, column2) VALUES (%s, %s)"data1 = ('value1', 'value2')cursor.execute(insert_query1, data1)# 执行第二个插入操作insert_query2 = "INSERT INTO table2 (column1, column2) VALUES (%s, %s)"data2 = ('value3', 'value4')cursor.execute(insert_query2, data2)# 提交事务cnx.commit()# 关闭游标和连接cursor.close()cnx.close()print("事务执行成功")except mysql.connector.Error as error:# 回滚事务cnx.rollback()# 关闭游标和连接cursor.close()cnx.close()print(f"事务执行失败: {error}")

在示例代码中,我们首先建立与数据库的连接。然后,在 try 块中开始事务,并创建游标对象。接下来,我们执行两个插入操作,分别向 table1table2 表插入数据。如果所有的操作都执行成功,我们通过调用 cnx.commit() 提交事务。如果任何一个操作失败,我们通过调用 cnx.rollback() 回滚事务。最后,我们关闭游标和连接。

七、支持连接池

mysql-connector-python 库还支持连接池功能,可以使用 mysql.connector.pooling 模块来创建连接池。

示例代码如下:

import mysql.connector
from mysql.connector import pooling# 创建连接池配置
pool_config = {"pool_name": "my_pool","pool_size": 5,"user": "your_username","password": "your_password","host": "your_host","database": "your_database"
}# 创建连接池
cnx_pool = mysql.connector.pooling.MySQLConnectionPool(**pool_config)# 从连接池获取连接
cnx = cnx_pool.get_connection()try:# 创建游标对象cursor = cnx.cursor()# 执行查询操作query = "SELECT * FROM your_table"cursor.execute(query)# 获取查询结果result = cursor.fetchall()for row in result:print(row)# 关闭游标cursor.close()except mysql.connector.Error as error:print(f"查询执行出错: {error}")finally:# 将连接返回给连接池cnx.close()

在示例代码中,我们首先创建连接池配置,其中包括连接池的名称、大小以及数据库连接的相关信息。然后,我们使用这些配置创建连接池对象 cnx_pool。接下来,我们通过调用 cnx_pool.get_connection() 从连接池中获取一个连接对象 cnx。在 try 块中,我们创建游标对象并执行查询操作。最后,无论查询是否成功,我们都通过调用 cnx_pool.release_connection(cnx) 将连接返回给连接池。

总结

这样,我们就完成了使用 mysql-connector-python 库来操作 MySQL 数据库的流程。
总结起来,使用 mysql-connector-python 库操作 MySQL 数据库包括建立数据库连接、执行查询操作、执行插入操作、提交事务和关闭连接等步骤。通过这个强大的库,您可以轻松地与 MySQL 数据库进行交互,并实现各种数据库操作。
希望本文能够帮助您入门使用 mysql-connector-python 库来操作 MySQL 数据库。祝你在使用 Python 进行数据库操作时取得成功!

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

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

相关文章

R语言——R函数、选项参数、数学统计函数(六)

目录 一、R函数 二、选项参数 三、数学统计函数 四、参考 一、R函数 1.lm() lm()是R语言中经常用到的函数&#xff0c;用来拟合回归模型。它是拟合线性模型最基本的函数 lm()格式如下&#xff1a; fit<-lm(formula,data) 其中&#xff0c;formula指要拟合的模型形式…

draw流程图工具导入云原生(CNCF)相关控件

目录 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 2、引用自己的资源链接&#xff1a; 1、通过draw导入xml文件&#xff0c;获取云原生相关的空间 导入资源图库&#xff0c;资源放在下方&#xff0c;大家可以下载&#xff1a; 2、引用自己的资源链接&#xff1a;…

Vue实现JSON字符串格式化编辑器组件

相信很多同学都用过网上的在线JSON格式化工具来将杂乱的JSON数据转换成易于我们阅读和编辑的格式。那么&#xff0c;你有没有想过自己动手实现一个这样的工具呢&#xff1f;今天&#xff0c;我将介绍如何使用Vue.js来构建一个简单的JSON格式化工具。 功能简述 支持格式化JSON字…

Linux使用yum命令安装postgrepsql

1.检查安装源 yum search postgresql 2.安装 yum install postgresql-server 3.启动数据库 service postgresql start 4.查看启动状态 service postgresql status 5.登陆测试 su - postgrep psql \l6.远程连接 6.1修改配置文件 在pg_hba.conf增加host all all 0.0.0…

解决Android AAPT: error: resource android:attr/lStar not found. 问题

错误信息 /xxx/gjc/.gradle/caches/transforms-2/files-2.1/930c42acd29d295ce5bc495c3b84423e/core-1.9.0/res/values/values.xml:104:5-113:25: AAPT: error: resource android:attr/lStar not found. not found 资源位置 场景 原Android studio中的项目都是在git上面拉的老项…

数据结构与算法python版本之线性结构之队列Quene

什么是队列&#xff1f; 队列是一种有次序的数据集合&#xff0c;其特征是&#xff1a;新数据项的添加总发生在一端&#xff08;通常称为“尾rear”端&#xff09;&#xff0c;而现存数据项的移除总发生在另一端&#xff08;通常称为“首front”端&#xff09;&#xff1b;当数…

详解静态网页数据获取以及浏览器数据和网络数据交互流程-Python

目录 前言 一、静态网页数据 二、网址通讯流程 1.DNS查询 2.建立连接 3.发送HTTP请求 4.服务器处理请求 5.服务器响应 6.渲染页面 7.页面交互 三、URL/POST/GET 1.URL 2.GET 形式 3.POST 形式 四.获取静态网页数据 1.requests库 点关注&#xff0c;防走丢&am…

粘接PI膜除了使用PI膜专用UV胶粘接,还可以使用热固化环氧胶来解决!

热固化环氧胶也是粘接聚酰亚胺&#xff08;PI&#xff09;膜的一种常见方法。 热固化环氧胶是一种在加热的条件下固化成坚固状态的胶水&#xff0c;在涂抹或涂覆胶水后&#xff0c;通过加热&#xff0c;胶水中的化学反应被触发&#xff0c;导致其硬化和固化&#xff0c;从而形…

C#语法进阶 Lambda

Lambda lambda:匿名方法 演变过程&#xff1a; 版本一&#xff1a; 首先创建一个委托&#xff1a; 创建委托需要调用的方法 调用 版本二&#xff1a;匿名方法 没有名字的方法&#xff0c;前面加一个delegate 这样写的话 可以访问局部变量 调用结果&#xff1a; 版本…

跑腿配送系统技术探析

概述 跑腿配送系统是一种基于现代科技的服务平台&#xff0c;通过智能化的技术手段&#xff0c;实现用户需求的快速响应和高效配送。本文将探讨该系统的核心技术原理&#xff0c;以及在实际开发中的一些代码示例。 技术原理 1. 用户请求与任务分配 跑腿配送系统的第一步是…

vue保姆级教程----深入了解 Vue Router的工作原理

&#x1f4e2; 鸿蒙专栏&#xff1a;想学鸿蒙的&#xff0c;冲 &#x1f4e2; C语言专栏&#xff1a;想学C语言的&#xff0c;冲 &#x1f4e2; VUE专栏&#xff1a;想学VUE的&#xff0c;冲这里 &#x1f4e2; CSS专栏&#xff1a;想学CSS的&#xff0c;冲这里 &#x1f4…

【error C2146: 语法错误: 缺少“;”(在标识符“PVOID64”的前面)】

用VS2013编译报错&#xff1a; 有人说既然是找不到PVOID64加个typedef就行了。经过本人的试验发现&#xff0c;的确是vs的include顺序问题&#xff0c;调整include顺序保证dx目录在IncludePath目录的下面即可解决问题。 在vs中&#xff0c;选择工具->选项->项目和解决方…

DoIP学习笔记系列:(八)车厂一般关于DoIP的相关测试分析

文章目录 1. 前言2. 基本项测试2.1 协议版本默认值2.2 车辆标识请求报文格式2.3 带EID的车辆标识请求报文格式2.4 带VIN的车辆标识请求报文格式2.5 否定响应码0x002.6 否定响应码0x012.7 否定响应码0x022.8 否定响应码0x042.9 路由激活应答码0x002.10 路由激活应答码0x012.11 路…

贝叶斯推断:细谈贝叶斯变分和贝叶斯网络

1. 贝叶斯推断 统计推断这件事大家并不陌生&#xff0c;如果有一些采样数据&#xff0c;我们就可以去建立模型&#xff0c;建立模型之后&#xff0c;我们通过对这个模型的分析会得到一些结论&#xff0c;不管我们得到的结论是什么样的结论&#xff0c;我们都可以称之为是某种推…

ElasticSearch 复合查询 Boolean Query

官网文档网址&#xff1a;Boolean query | Elasticsearch Guide [7.17] | Elastic 目录 复合查询 Boolean Query 利用bool查询实现功能 总结 复合查询 Boolean Query 布尔查询是一个或多个查询子句的组合。子查询的组合方式有&#xff1a; must:必须匹配每个子查询&#xf…

webpack 5 loader

webpack 本身不能识别js&#xff0c;json外的资源&#xff0c;所以我们需要借助其他loader来处理对应的文件 CSS Loader&#xff0c;处理css 安装 npm i css-loader style-loader -D css-loader 负责讲css编译成webpack能识别的模块内容style-loader 动态创建<style&g…

用CHAT写一简单的C语言线程池的示例

问CHAT&#xff1a;编写一个简单的C语言线程池的示例 CHAT回复&#xff1a;在C语言中&#xff0c;实现线程池需要手动创建线程和管理任务队列。以下是一个简单的C语言线程池的示例&#xff1a; c #include <pthread.h> #include <stdio.h> #define NUM_THREADS 5 …

【前沿技术】超级稳定的视频卡通画方案

Git clone项目到本地 git clone gitgithub.com:Artiprocher/DiffSynth-Studio.git 基本原理 使用了stable diffusion稳定扩散模型和controlnet来控制图像生成的轮廓&#xff0c;animatediff控制视频帧与帧之间的连续性&#xff0c;最后使用RIFE技术平滑整个生成后的视频。 …

一、HTML5简介

一、简介 超文本标记语言&#xff08;英语&#xff1a;HyperText Markup Language&#xff0c;简称&#xff1a;HTML&#xff09;是一种用于创建网页的标准标记语言。可以使用 HTML 来建立自己的 WEB 站点&#xff0c;HTML 运行在浏览器上&#xff0c;由浏览器来解析。 <!…

GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(一)

这几天没有更新&#xff0c;其主要的的原因是&#xff0c;在学习对Elasticsearch的使用。Elasticsearch是一个非常强大的数据库索引工具。是一个基于Lucene库的搜索引擎。它提供了一个分布式、支持多租户的全文搜索引擎&#xff0c;具有HTTP Web接口和无模式JSON文档。Elastics…