python操作mysql

前言
在 Python3 中,我们可以使用mysqlclient或者pymysql三方库来接入 MySQL 数据库并实现数据持久化操作。二者的用法完全相同,只是导入的模块名不一样。我们推荐大家使用纯 Python 的三方库pymysql,因为它更容易安装成功。下面我们仍然以之前创建的名为hrs的数据库为例,为大家演示如何通过 Python 程序操作 MySQL 数据库实现数据持久化操作。

接入MySQL
首先,我们可以在命令行或者 PyCharm 的终端中通过下面的命令安装pymysql,如果需要接入 MySQL 8,还需要安装一个名为cryptography的三方库来支持 MySQL 8 的密码认证方式。

pip install pymysql cryptography

主要流程:
创建链接—>获取游标---->发出sql---->结果执行---->关闭连接
下面进入代码实战
插入操作

"""
上面的代码中,我们通过构造一个while循环实现了逐行抓取查询结果的操作。这种方式特别适合查询结果有非常多行的场景。
因为如果使用fetchall一次性将所有记录抓取到一个嵌套元组中,会造成非常大的内存开销,这在很多场景下并不是一个好主意。
如果不愿意使用while循环,还可以考虑使用iter函数构造一个迭代器来逐行抓取数据,
"""
import pymysql# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4')
try:# 2. 获取游标对象(Cursor)with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句cursor.execute('select `no`, `name`, `location` from `tb_dept`')# 4. 通过游标对象抓取数据row = cursor.fetchone()while row:print(row)row = cursor.fetchone()
except pymysql.MySQLError as err:print(type(err), err)
finally:# 5. 关闭连接释放资源conn.close()

批量插入

import pymysql# 提示用户输入多条部门信息
data_list = []
while True:no = input('请输入部门编号(输入q结束): ')if no.lower() == 'q':breakname = input('请输入部门名称: ')location = input('请输入部门所在地: ')# 将输入的数据存储为元组并添加到列表中data_list.append((int(no), name, location))# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4')try:# 2. 获取游标对象(Cursor)with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出批量插入的SQL语句affected_rows = cursor.executemany('insert into `tb_dept` values (%s, %s, %s)',data_list)if affected_rows == len(data_list):print('批量新增部门成功,共插入 {} 条数据!'.format(affected_rows))# 4. 提交事务(transaction)conn.commit()except pymysql.MySQLError as err:# 4. 回滚事务conn.rollback()print(type(err), err)
finally:# 5. 关闭连接释放资源conn.close()

删除操作

import pymysqlno = int(input('部门编号: '))# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4',autocommit=True)
try:# 2. 获取游标对象(Cursor)with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句affected_rows = cursor.execute('delete from `tb_dept` where `no`=%s',(no, ))if affected_rows == 1:print('删除部门成功!!!')
finally:# 5. 关闭连接释放资源conn.close()

修改操作

import pymysqlno = int(input('部门编号: '))
name = input('部门名称: ')
location = input('部门所在地: ')# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4')
try:# 2. 获取游标对象(Cursor)with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句affected_rows = cursor.execute('update `tb_dept` set `name`=%s, `location`=%s where `no`=%s',(name, location, no))if affected_rows == 1:print('更新部门信息成功!!!')# 4. 提交事务conn.commit()
except pymysql.MySQLError as err:# 4. 回滚事务conn.rollback()print(type(err), err)
finally:# 5. 关闭连接释放资源conn.close()

查询操作

"""
上面的代码中,我们通过构造一个while循环实现了逐行抓取查询结果的操作。这种方式特别适合查询结果有非常多行的场景。
因为如果使用fetchall一次性将所有记录抓取到一个嵌套元组中,会造成非常大的内存开销,这在很多场景下并不是一个好主意。
如果不愿意使用while循环,还可以考虑使用iter函数构造一个迭代器来逐行抓取数据,
"""
import pymysql# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4')
try:# 2. 获取游标对象(Cursor)with conn.cursor() as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句cursor.execute('select `no`, `name`, `location` from `tb_dept`')# 4. 通过游标对象抓取数据row = cursor.fetchone()while row:print(row)row = cursor.fetchone()
except pymysql.MySQLError as err:print(type(err), err)
finally:# 5. 关闭连接释放资源conn.close()

分页查询

import pymysqlpage = int(input('页码: '))
size = int(input('大小: '))# 1. 创建连接(Connection)
con = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8')
try:# 2. 获取游标对象(Cursor)with con.cursor(pymysql.cursors.DictCursor) as cursor:# 3. 通过游标对象向数据库服务器发出SQL语句cursor.execute('select `no`, `name`, `location` from `tb_dept` order by `no` desc limit %s,%s',((page - 1) * size, size))# 4. 通过游标对象抓取数据for emp_dict in cursor.fetchall():print(emp_dict)
finally:# 5. 关闭连接释放资源con.close()

将数据库数据导入到excel中

import openpyxl
import pymysql# 创建工作簿对象
workbook = openpyxl.Workbook()
# 获得默认的工作表
sheet = workbook.active
# 修改工作表的标题
sheet.title = '员工基本信息'
# 给工作表添加表头
sheet.append(('工号', '姓名', '地址'))
# 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,user='root', password='123456',database='db2', charset='utf8mb4')
try:# 获取游标对象(Cursor)with conn.cursor() as cursor:# 通过游标对象执行SQL语句cursor.execute('select `no`, `name`, `location` ''from `tb_dept`')# 通过游标抓取数据row = cursor.fetchone()while row:# 将数据逐行写入工作表中sheet.append(row)row = cursor.fetchone()# 保存工作簿workbook.save('hrs.xlsx')
except pymysql.MySQLError as err:print(err)
finally:# 关闭连接释放资源conn.close()

好了 至此 python操作mysql 点点关注不迷路 老铁们!!!!!

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

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

相关文章

CCF开源发展委员会开源供应链安全工作组2025年第1期技术研讨会顺利举行

点击蓝字 关注我们 CCF Opensource Development Committee 2025年1月17日,CCF开源发展委员会供应链安全工作组(CCF-ODC-OSS)2025年第一期技术研讨会——“大模型时代的开源供应链安全风控技术”于北京黄大年茶思屋顺利举行。本次研讨会邀请了…

如何进行市场调研?海外问卷调查有哪些类型和示例?

什么是市场研究? 市场研究的目的,就是调查消费者的行为和当时的经济趋势,帮助企业制定和调整经营理念和经营路线,通过收集和分析数据,帮助企业了解其目标市场。 市场调查是通过对潜在客户的分析,来判断品…

DX12 快速教程(4) —— 画钻石原矿

快速导航 新建项目 "004-DrawTexture"纹理贴图纹理采样纹理过滤邻近点采样双线性过滤Mipmap 多级渐远纹理三线性过滤各向异性过滤 纹理环绕LOD 细节层次 开始画钻石原矿吧加载纹理到内存中:LoadTexture什么是 WIC如何用 WIC 读取一帧图片获取图片格式并转…

FPGA实现任意角度视频旋转(二)视频90度/270度无裁剪旋转

本文主要介绍如何基于FPGA实现视频的90度/270度无裁剪旋转,旋转效果示意图如下: 为了实时对比旋转效果,采用分屏显示进行处理,左边代表旋转前的视频在屏幕中的位置,右边代表旋转后的视频在屏幕中的位置。 分屏显示的…

Blazor-选择循环语句

今天我们来说说Blazor选择语句和循环语句。 下面我们以一个简单的例子来讲解相关的语法,我已经创建好了一个Student类,以此类来进行语法的运用 因为我们需要交互性所以我们将类创建在*.client目录下 if 我们做一个学生信息的显示,Gender为…

数据结构——实验八·学生管理系统

嗨~~欢迎来到Tubishu的博客🌸如果你也是一名在校大学生,正在寻找各种编程资源,那么你就来对地方啦🌟 Tubishu是一名计算机本科生,会不定期整理和分享学习中的优质资源,希望能为你的编程之路添砖加瓦⭐&…

在 Ubuntu22.04 上安装 Splunk

ELK感觉太麻烦了,换个日志收集工具 Splunk 是一种 IT 工具,可帮助在任何设备上收集日志、分析、可视化、审计和创建报告。简单来说,它将“机器生成的数据转换为人类可读的数据”。它支持从虚拟机、网络设备、防火墙、基于 Unix 和基于 Windo…

【C++高并发服务器WebServer】-2:exec函数簇、进程控制

本文目录 一、exec函数簇介绍二、exec函数簇 一、exec函数簇介绍 exec 函数族的作用是根据指定的文件名找到可执行文件,并用它来取代调用进程的内容,换句话说,就是在调用进程内部执行一个可执行文件。 exec函数族的函数执行成功后不会返回&…

[ACTF2020 新生赛]Upload1

题目 以为是前端验证&#xff0c;试了一下PHP传不上去 可以创建一个1.phtml文件。对.phtml文件的解释: 是一个嵌入了PHP脚本的html页面。将以下代码写入该文件中 <script languagephp>eval($_POST[md]);</script><script languagephp>system(cat /flag);&l…

第24篇 基于ARM A9处理器用汇编语言实现中断<六>

Q&#xff1a;怎样设计ARM处理器汇编语言程序使用定时器中断实现实时时钟&#xff1f; A&#xff1a;此前我们曾使用轮询定时器I/O的方式实现实时时钟&#xff0c;而在本实验中将采用定时器中断的方式。新增第三个中断源A9 Private Timer&#xff0c;对该定时器进行配置&#…

SpringMVC新版本踩坑[已解决]

问题&#xff1a; 在使用最新版本springMVC做项目部署时&#xff0c;浏览器反复500&#xff0c;如下图&#xff1a; 异常描述&#xff1a; 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…

系统思考—复杂问题的根源分析

在企业中&#xff0c;许多问题看似简单&#xff0c;背后却潜藏着复杂的因果关系。传统的思维方式往往只能看到表面&#xff0c;而无法深入挖掘问题的真正根源。我们常常通过“表面解决”来应对眼前的症状&#xff0c;但这往往只是治标不治本。 比如&#xff0c;销量下降时&…

安装VMware17

一、VMware Workstation 简介 VMware Workstation是一款由VMware公司开发的功能强大的桌面虚拟化软件。它允许用户在单一的物理电脑上同时运行多个操作系统作为虚拟机&#xff08;VMs&#xff09;&#xff0c;每个虚拟机都可配置有自己的独立硬件资源&#xff0c;如CPU核心、内…

三、双链表

链表的种类有很多&#xff0c;单链表是不带头不循环单向链表&#xff0c;但双链表是带头循环双向链表&#xff0c;并且双链表还有一个哨兵位&#xff0c;哨兵位不是头节点 typedef int LTDataType;typedef struct ListNode{struct ListNode* next; //指针保存下⼀个结点的地址s…

【知识】可视化理解git中的cherry-pick、merge、rebase

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ 这三个确实非常像&#xff0c;以至于对于初学者来说比较难理解。 总结对比 先给出对比&#xff1a; 特性git mergegit rebasegit cherry-pick功能合并…

SpringBoot开发(三)SpringBoot介绍、项目创建、运行

1. SpringBoot 1.1. SpringBoot介绍 Spring Boot给世界程序员带来了春天&#xff0c;越来越多的企业选择使用spring boot来开发他们的软件&#xff0c;因此学习spring boot是科技发展的必然趋势。本门课程将从web最基础的知识点开始讲起&#xff0c;逐步带你攻破spring boot的…

438. 找到字符串中所有字母异位词

【题目】&#xff1a;438. 找到字符串中所有字母异位词 class Solution { public:vector<int> findAnagrams(string s, string p) {vector<int> res;vector<int> curVec(26, 0); // 统计p中字母出现的次数for(char c : p) {curVec[c - a];}for(int l 0, r …

Leetcode-两数之和

1.暴力枚举 class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int lennums.size();int i,j;for(i0;i<len;i){for(ji1;j<len;j){if(nums[i]nums[j]target){return{i,j};}}}return {i,j};} }; 新知识&#xff1a; return {…

边缘网关具备哪些功能?

边缘网关&#xff0c;又称边缘计算网关&#xff0c;部署在网络边缘&#xff0c;它位于物联网设备与云计算平台之间&#xff0c;充当着数据流动的“守门员”和“处理器”。通过其强大的数据处理能力和多样化的通信协议支持&#xff0c;边缘网关能够实时分析、过滤和存储来自终端…

高等数学学习笔记 ☞ 微分方程

1. 微分方程的基本概念 1. 微分方程的基本概念&#xff1a; &#xff08;1&#xff09;微分方程&#xff1a;含有未知函数及其导数或微分的方程。 举例说明微分方程&#xff1a;&#xff1b;。 &#xff08;2&#xff09;微分方程的阶&#xff1a;指微分方程中未知函数的导数…