Python使用pymysql操作数据库

        大家好,当涉及到与数据库进行交互和操作时,Python的pymysql库是一个常用且功能强大的选择。pymysql提供了与MySQL数据库的连接、查询、插入、更新和删除等操作的方法,使得在Python中进行数据库操作变得简单而高效。

1、安装 pymysql 库

在开始之前,确保已经安装了 pymysql 库。可以使用以下命令通过 pip 进行安装:

pip install pymysql

2、连接数据库

        首先,我们需要建立与数据库的连接。使用 pymysql 的 connect() 函数来创建一个数据库连接对象,该函数接受数据库的连接参数,例如主机名、用户名、密码、数据库名等。以下是一个建立与 MySQL 数据库的连接的示例:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)

        在上述示例中,我们通过传递数据库的连接参数来建立与数据库的连接。根据实际情况,您需要将 hostuserpassword 和 database 替换为相应的值。

3、创建游标对象

        在建立数据库连接后,我们需要创建一个游标对象来执行 SQL 语句和操作数据库。游标对象允许我们执行查询、插入、更新或删除等数据库操作。

# 创建游标对象
cursor = connection.cursor()

4、执行 SQL 查询

        使用游标对象,我们可以执行 SQL 查询并获取结果。pymysql 提供了多个方法来执行查询,其中最常用的是 execute() 和 fetchone()fetchall() 方法。

  • execute() 方法用于执行 SQL 查询,可以接受带有占位符的参数。
  • fetchone() 方法用于获取查询结果的下一行数据。
  • fetchall() 方法用于获取查询结果的所有行数据。

以下是一个执行查询并获取结果的示例:

# 执行查询
cursor.execute('SELECT * FROM table_name')# 获取查询结果的所有行数据
rows = cursor.fetchall()# 遍历结果
for row in rows:print(row)

        在上述示例中,我们执行了一个简单的查询语句,并使用 fetchall() 方法获取查询结果的所有行数据。然后,我们遍历每一行数据并将其打印出来。

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

        除了执行查询,pymysql 也支持执行插入、更新和删除等操作。使用 execute() 方法执行这些操作,可以将相应的 SQL 语句作为参数传递给它。

(1)插入操作

# 执行插入操作
cursor.execute("INSERT INTO table_name (column1, column2) VALUES (%s, %s)", ('value1', 'value2'))# 提交事务
connection.commit()

(2)更新操作

# 执行更新操作
cursor.execute("UPDATE table_name SET column1 = %s WHERE column2 = %s", ('new_value', 'condition'))# 提交事务
connection.commit()

(3)删除操作

# 执行删除操作
cursor.execute("DELETE FROM table_name WHERE column1 = %s", ('condition',))# 提交事务
connection.commit()

        在上述示例中,我们使用 execute() 方法执行了插入、更新和删除操作,并使用参数占位符 %s 来传递值。最后,我们通过 connection.commit() 提交事务。

6、关闭连接

在完成数据库操作后,不要忘记关闭数据库连接,以释放资源。

# 关闭游标对象
cursor.close()# 关闭数据库连接
connection.close()

在上述示例中,我们使用 close() 方法关闭了游标对象和数据库连接。

7、完整实例

        以下是一个完整的例子,展示了如何连接到MySQL数据库、创建表、插入数据、执行查询并获取结果:

import pymysql# 建立数据库连接
connection = pymysql.connect(host='localhost',user='username',password='password',database='database_name'
)try:# 创建游标对象cursor = connection.cursor()# 创建表create_table_query = '''CREATE TABLE IF NOT EXISTS employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),age INT,department VARCHAR(100))'''cursor.execute(create_table_query)# 插入数据insert_query = "INSERT INTO employees (name, age, department) VALUES (%s, %s, %s)"employees_data = [('John Doe', 30, 'IT'),('Jane Smith', 35, 'HR'),('Mark Johnson', 28, 'Sales')]cursor.executemany(insert_query, employees_data)# 提交事务connection.commit()# 执行查询select_query = "SELECT * FROM employees"cursor.execute(select_query)# 获取查询结果的所有行数据rows = cursor.fetchall()# 打印查询结果for row in rows:print(row)finally:# 关闭游标对象和数据库连接cursor.close()connection.close()

在上述示例中,我们首先建立了与MySQL数据库的连接,然后使用游标对象执行以下操作:

  1. 创建表:我们使用CREATE TABLE语句创建了一个名为employees的表,具有id、name、age和department等列。

  2. 插入数据:我们使用executemany()方法批量插入了几条员工数据。

  3. 提交事务:使用connection.commit()提交所有的插入操作,将数据持久化到数据库。

  4. 执行查询:我们执行了一个简单的SELECT查询语句,并使用fetchall()方法获取查询结果的所有行数据。

  5. 打印查询结果:我们遍历查询结果,并将每一行数据打印出来。

  6. 最后,关闭了游标对象和数据库连接,释放了资源。

8、连接池

        使用pymysqlConnectionPool()函数创建一个数据库连接池对象。该函数接受连接参数,例如主机名、用户名、密码、数据库名等,以及一些连接池相关的参数,例如最大连接数、最小空闲连接数等。

以下是创建连接池的示例:

# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)

        在上述示例中,我们使用了一些常用的连接池参数,如maxconnections表示最大连接数,mincached表示最小空闲连接数。可以根据实际需求调整这些参数。

        使用连接池对象的connection()方法从连接池中获取一个数据库连接。这样,每次需要连接时,可以直接从连接池中获取,而不需要手动创建连接。

# 从连接池获取连接
connection = connection_pool.get_connection()

现在,可以使用connection对象执行数据库操作。例如执行查询、插入、更新和删除等。

# 创建游标对象
cursor = connection.cursor()# 执行查询
cursor.execute("SELECT * FROM table_name")# 获取查询结果的所有行数据
rows = cursor.fetchall()# 打印查询结果
for row in rows:print(row)# 关闭游标对象
cursor.close()# 将连接返回给连接池
connection_pool.release(connection)

在上述示例中,使用连接对象的cursor()方法创建游标对象,并执行了一个查询操作。最后,我们关闭了游标对象,并使用连接池的release()方法将连接返回给连接池。

在程序结束时,确保关闭连接池,以释放资源。

# 关闭连接池
connection_pool.close()

以下是一个完整的pymysql连接池的示例:

import pymysql.cursors# 创建连接池
connection_pool = pymysql.cursors.ConnectionPool(host='localhost',user='username',password='password',database='database_name',autocommit=True,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor,maxconnections=10,mincached=5
)try:# 从连接池获取连接connection = connection_pool.get_connection()# 创建游标对象cursor = connection.cursor()# 执行查询cursor.execute("SELECT * FROM table_name")# 获取查询结果的所有行数据rows = cursor.fetchall()# 打印查询结果for row in rows:print(row)# 关闭游标对象cursor.close()# 将连接返回给连接池connection_pool.release(connection)finally:# 关闭连接池connection_pool.close()

在上述示例中,首先创建了一个pymysql连接池对象,设置了连接池的参数,如最大连接数和最小空闲连接数。

然后,在try-finally块中执行以下操作:

  • 从连接池获取连接:

    使用连接池对象的get_connection()方法从连接池中获取一个数据库连接。

  • 执行查询:

    使用获取的连接对象创建游标对象,并执行查询操作。

  • 获取查询结果:

    使用游标对象的fetchall()方法获取查询结果的所有行数据。

  • 打印查询结果:

    遍历查询结果,并将每一行数据打印出来。

  • 关闭游标对象:

    使用游标对象的close()方法关闭游标对象。

  • 将连接返回给连接池:

    使用连接池对象的release()方法将连接返回给连接池,以便重复使用。

最后,在finally块中,关闭了连接池,确保在程序结束时释放资源。

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

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

相关文章

Python3 笔记:部分专有名词解释

1、python 英 /ˈpaɪθən/ 这个词在英文中的意思是蟒蛇。但据说Python的创始人Guido van Rossum(吉多范罗苏姆)选择Python这个名字的原因与蟒蛇毫无关系,只是因为他是“蒙提派森飞行马戏团(Monty Python's Flying Ci…

【静态分析】在springboot使用太阿(Tai-e)01

参考:使用太阿(Tai-e)进行静态代码安全分析(spring-boot篇一) - 先知社区 ---------------------------------------------------------------------- 由于spring-boot实现了控制反转与面向切面编程的设计思想&#x…

OpenHarmony轻松玩转GIF数据渲染

OpenAtom OpenHarmony(以下简称“OpenHarmony”)提供了Image组件支持GIF动图的播放,但是缺乏扩展能力,不支持播放控制等。今天介绍一款三方库——ohos-gif-drawable三方组件,带大家一起玩转GIF的数据渲染,搞…

二手车经营效率罗盘,用经营效率罗盘玩转二手车生意

课程下载:https://download.csdn.net/download/m0_66047725/89292198 更多资源下载:关注我。 带你了解不一样的二手车圈让二手车经营更高效 课程介绍 随着时代不断发展,二手车行业迎来了快速变革期。二手车有着一车一况、一车一价非标和价…

无人机+飞行服务:无人机飞防服务(打药+施肥+播种)技术详解

无人机飞防服务,结合了先进的无人机技术与农业实践,为现代农业提供了高效、精准的打药、施肥和播种解决方案。以下是对这些技术的详细解析: 一、无人机打药技术 无人机打药技术利用无人机搭载喷雾设备,对农田进行精准施药。通过…

【Crypto】看我回旋踢

文章目录 一、看我回旋踢二、知识点什么是ROT13?工作原理分析字符串格式 解题感悟 一、看我回旋踢 关键词回旋,盲猜ROT13 因为以 synt{ 开头,并以 } 结束,基本可以判断是ROT13 小小flag,拿下! 二、知识点 …

抖音极速版:抖音轻量精简版本,新人享大福利

和快手一样,抖音也有自己的极速版,可视作抖音的轻量精简版,更专注于刷视频看广告赚钱,收益比抖音要高,可玩性更佳。 抖音极速版简介 抖音极速版是一个提供短视频创业和收益任务的平台,用户可以通过观看广…

【机器学习聚类算法实战-5】机器学习聚类算法之DBSCAN聚类、K均值聚类算法、分层聚类和不同度量的聚集聚类实例分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

保障餐饮场所安全:定期送检可燃气体报警器

在餐饮行业,火灾隐患一直备受关注。餐厅、茶饮店等场所常常使用燃气设备,而这些设备带来了潜在的安全隐患。 为了及时发现并预防可燃气体泄漏,可燃气体报警器的定期送检显得尤为重要。那么,为什么可燃气体报警器需要定期送检呢&a…

【Linux】从零开始认识进程间通信 —— 管道

送给大家一句话: 人要成长,必有原因,背后的努力与积累一定数倍于普通人。所以,关键还在于自己。 – 杨绛 从零开始认识进程间通信 1 为什么要进程间通信2 进程如何通信3 进程通信的常见方式4 管道4.1 什么是管道4.2 管道通信的系…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义,是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG:The X/Open Porta…

零一万物Yi-1.5开源,34B/9B/6B多尺寸,34B超Qwen1.5-72B

前言 近年来,大型语言模型(LLM)在各个领域展现出惊人的能力,为人们的生活和工作带来了巨大的改变。然而,大多数开源 LLM 的性能仍然无法与闭源模型相媲美,这限制了 LLM 在科研和商业领域的进一步应用。为了…

element-plus表格的表单校验如何实现,重点在model和prop

文章目录 vue&#xff1a;3.x element-plus&#xff1a;2.7.3 重点&#xff1a; 1) tableData放到form对象里 2) form-item的prop要写成tableData.序号.属性 <!--table-表单校验--> <template><el-form ref"forms" :model"form"><e…

安装mpi4py与dlio_profiler_py的总结

安装mpi4py mpi4py是一个Python库&#xff0c;它提供了与MPI&#xff08;Message Passing Interface&#xff09;兼容的接口&#xff0c;使得Python程序能够利用MPI实现并行计算。mpi4py 的核心是基于MPI标准的C/C实现&#xff0c;它能够在高性能计算环境下进行高效的并行处理…

软考之信息系统管理知识点(3)

流水线&#xff1a;是指在程序执行时多条指令重叠进行操作的一种准并行处理实现技术。各种部件同时处理是针对不同指令而言的&#xff0c;它们可同时为多条指令的不同部分进行工作&#xff0c;以提高各部件的利用率和指令的平均执行速度。 编译得过程 关系数据库是表的集合 …

【全网最全】2024电工杯数学建模A题前两问完整解答+21页初步参考论文+py代码+保奖思路等(后续会更新成品论文)

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击如下的卡片链接&#xff0c;那是获取资料的入口&#xff01; 【全网最全】2024电工杯数学建模A题前两问完整解答21页初步参考论文py代码保奖思路等&#xff08;后续会更新成品论文&#xff09;「首先来看看目前已有…

力扣:92. 反转链表 II(Java)

目录 题目描述&#xff1a;示例 1&#xff1a;示例 2&#xff1a;代码实现&#xff1a; 题目描述&#xff1a; 给你单链表的头指针 head 和两个整数 left 和 right &#xff0c;其中 left < right 。请你反转从位置 left 到位置 right 的链表节点&#xff0c;返回 反转后的…

网络采集受限?如何解决指纹识别、IP封禁、验证码、账号多登等问题

网页采集是什么 网页采集&#xff0c;也常被称作网络采集、网络数据抓取&#xff0c;是一种通过自动化工具从网站上获取信息的技术。这些技术通过访问网页&#xff0c;解析页面上的内容&#xff0c;并提取出有价值的数据&#xff0c;如文本、图片、链接等。 网页采集通常用于…

Python 调整PDF文件的页面大小

在处理PDF文件时&#xff0c;我们可能会遇到这样的情况&#xff1a;原始PDF文档不符合我们的阅读习惯&#xff0c;或者需要适配不同显示设备等。这时&#xff0c;我们就需要及时调整PDF文档中的页面尺寸&#xff0c;以满足不同应用场景的需求。 利用Python语言的高效性和灵活性…

Linux--网络通信(一)概述

网络通信概述 网络通信本质上是一种进程间通信&#xff0c;是位于网络中不同主机上的进程之间的通信&#xff0c;属于 IPC 的一种&#xff0c; 通常称为 socket IPC。所以网络通信是为了解决在网络环境中&#xff0c;不同主机上的应用程序之间的通信问题。 大概可以分为三个层…