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,一经查实,立即删除!

相关文章

面部捕捉 学习笔记

目录 FaceShift Studio FaceRig Pro是一款功能强大的面部捕捉视频制作软件版 FaceShift Studio FaceShift人脸表情识别原理分析 - 知乎 FaceRig Pro是一款功能强大的面部捕捉视频制作软件版

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的数据渲染,搞…

如何在JS中克隆对象

在JavaScript中,克隆对象并不是直接支持的操作,因为JavaScript中的对象是通过引用传递的,而不是通过值传递。但是,你可以使用几种不同的方法来"克隆"或"复制"一个对象。 1. 浅拷贝(Shallow Copy&…

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

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

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

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

【数仓系列】maxcompute、postgresql、sparksql等行转列数据处理实战总结(其他类型持续总结更新)

1.熟悉、梳理、总结项目研发实战中的SQL开发日常使用中的问题、经验总结,都是常用的开发技能,可以省去很多时间,时间长就忘记了 2.欢迎点赞、关注、批评、指正,互三走起来,小手动起来! 文章目录 1.maxcompu…

关于java.nio.file 包--用于文件和文件系统操作的核心包之一

java.nio.file 包是 Java 中用于文件和文件系统操作的核心包之一。这个包提供了许多类和接口,用于在 Java 虚拟机中访问文件、管理文件属性和操作文件系统。主要的功能包括: 1.访问文件和目录: java.nio.file.Files 类提供了许多静态方法,用于…

【Crypto】看我回旋踢

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

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

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

leetcode-560 和为k的数组

一、题目描述 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 注意:nums中的元素可为负数 输入:nums [1,1,1], k 2 输出:2输入:num…

装饰乙级资质延期申请的注意事项

在申请装饰乙级资质延期时,企业需要注意以下几个重要事项: 提前了解政策和要求: 企业应提前了解并熟悉资质延期的相关政策和要求,包括所需材料、办理流程、时间限制等。这有助于企业做好充分准备,避免在申请过程中出现…

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

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

MYSQL课堂练习

学生表:studentsno,sname,ssex,sage,sdept)学号,姓名,性别,年龄,所在系 sno为主键课程表:Course(cno,cname,) 课程号,课程名 cno为主键 学生选课…

申报照明工程设计乙级资质关于财务审计报告的要求

申报照明工程设计乙级资质时,关于财务审计报告的要求通常包括以下几点: 审计报告类型:需要提供由具有法定资质的会计师事务所出具的财务审计报告。如果是企业已经运营满一个会计年度,应提交最近一个完整会计年度的年度审计报告。如…

Rust:struct 与字节序列的相互转换

在 Rust 中&#xff0c;将结构体&#xff08;struct&#xff09;与字节序列&#xff08;Vec<u8>&#xff09;相互转换的常见方法是使用序列化和反序列化库。Rust 有一个流行的序列化库叫做 serde&#xff0c;它支持多种数据格式。为了将结构体转换为字节序列&#xff0c;…

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

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

【MySQL精通之路】系统变量-动态系统变量

许多服务器系统变量是动态的&#xff0c;可以在运行时进行设置。 参见“变量赋值的SET语法”。 有关设置系统变量的权限要求的描述&#xff0c;请参阅“系统变量权限” 【MySQL精通之路】系统变量-系统变量权限-CSDN博客 下表列出了所有适用于mysqld的动态系统变量。 该表列出…

java 设计模式(三)-- 单例模式

引言 单例模式是一种常用的软件设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取这个实例。单例模式在Java中实现起来相对简单&#xff0c;但实现方式有多种&#xff0c;每种方式都有其特点和适用场景。 一、单例模式的实现方式 1. 懒汉…