Python系列:教你使用PyMySQL操作MySQL数据库
- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSite:http://thispage.tech/
Email: 291148484@163.com.
Shenzhen China
Address of this article:https://blog.csdn.net/qq_28550263/article/details/139273222
HuaWei:https://bbs.huaweicloud.com/blogs/428257
【介绍】:本文教你如何基于Python读写MySQL数据库。
目 录
1. 概述
PyMySQL是一个用于Python语言连接和操作MySQL数据库的库。它提供了一种简单而强大的方式来与MySQL数据库进行交互,允许开发者执行各种数据库操作,如建立连接、执行查询、插入数据等。
2. 安装和配置 2.1安装PyMySQL
可以使用pip命令安装PyMySQL
库:
pip install PyMySQL
2.2 配置数据库连接
要使用PyMySQL
连接MySQL
数据库,需要提供数据库的主机名、端口号、用户名、密码以及数据库名称等信息。可以将这些信息存储在一个字典中,如:
config = {'host': 'localhost','port': 3306,'user': 'username', # 你的用户名'password': 'password', # 你的密码'database': 'database_name' # 你的数据库名
}
3. 建立数据库连接
3.1 创建连接对象
在PyMySQL中,游标(Cursor)是一个非常重要的概念,它用于执行查询和获取结果。游标允许逐行处理查询结果,从而可以控制从数据库检索的数据量和顺序。
3.1.1 游标的作用执行SQL语句:游标对象用来执行SQL语句,如查询、插入、更新和删除。
获取结果:执行查询后,游标可以用来逐行或批量获取结果数据。
参数化查询:游标支持使用参数化查询,这有助于防止SQL注入攻击。
事务控制:通过游标执行的操作可以被提交或回滚,这对于维护数据的一致性非常重要。
3.1.2 创建游标对象从数据库连接对象中创建游标对象的基本方法如下:
cursor = connection.cursor()
此外,PyMySQL允许指定游标的类型,例如,使用DictCursor,查询结果将以字典形式返回,其中列名是字典的键:
cursor = connection.cursor(pymysql.cursors.DictCursor)
这种方式使得处理结果更加直观和方便,因为可以通过列名访问数据,而不是通过列的索引位置。
3.1.3 示例创建游标对象后,可以使用它来执行SQL命令。例如,执行一个查询并获取所有结果:
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:print(row)
在这个例子中,execute
方法用于执行SQL查询,fetchall
方法用于获取所有行的数据。
从连接对象中创建一个游标对象,用于执行SQL
查询:
cursor = connection.cursor()
4. 执行SQL
查询
上面介绍了,在PyMySQL中,执行SQL查询是通过游标对象(Cursor)完成的。这包括SELECT查询来获取数据,以及INSERT、UPDATE和DELETE查询来修改数据。接下来具体介绍如何使用PyMySQL执行这些操作。
4.1 执行SELECT
查询
要执行SELECT查询,首先需要编写SQL查询语句。然后,使用游标对象的execute()
方法来执行这个查询。查询结果可以通过游标提供的方法如fetchall()
或fetchone()
来获取。
步骤:
- 编写查询语句:确定你需要执行的SELECT语句。
- 执行查询:使用游标的execute()方法执行SQL语句。
- 获取结果:使用fetchall()获取所有结果,或使用fetchone()获取单个结果。
query = "SELECT * FROM users"
cursor.execute(query)
results = cursor.fetchall()
for row in results:print(row)
在这个例子中,execute()
方法执行了SQL查询,fetchall()
方法获取了所有的查询结果,并且结果通过一个循环打印出来。
INSERT
、UPDATE
和DELETE
查询
对于INSERT、UPDATE和DELETE操作,步骤类似于执行SELECT查询,但通常需要在执行这些操作后提交更改,以确保更改被保存到数据库中。步骤:
- 编写SQL语句:根据需要修改数据的类型编写相应的INSERT、UPDATE或DELETE语句。
- 执行查询:使用游标的
execute()
方法执行SQL语句。对于INSERT和UPDATE操作,可以传递参数来避免SQL
注入。 - 提交更改:使用连接对象的
commit()
方法提交更改到数据库。
query = "INSERT INTO users (name, age) VALUES (%s, %s)"
values = ('John', 25)cursor.execute(query, values)
connection.commit()
在这个例子中,execute()
方法不仅执行了INSERT查询,还通过传递参数的方式提供了要插入的数据,这有助于防止SQL注入。执行后,使用commit()
方法确保更改被保存。
可以使用for
循环遍历fetchall()
返回的查询结果:
for row in results:print(row)
5.2 访问特定字段
可以使用索引或字段名访问查询结果中的特定字段:
name = row[0] # 使用索引age = row['age'] # 使用字段名
6. 关闭连接
6.1 关闭游标和连接
在完成数据库操作后,需要关闭游标和连接对象以释放资源:
cursor.close()
connection.close()
6.2 使用with语句自动关闭
可以使用with语句自动管理连接和游标的关闭:
with pymysql.connect(**config) as connection:with connection.cursor() as cursor:# 执行查询操作pass
7. 一个连续的示例
现在假设你安装好了MySQL、Python3环境,并安装了PyMySQL库。由于PyMySQL库并不会自动创建连接的数据库,需要先登录你的MySQL中手动创建一个数据库。
假设你的root用户的密码为:123456
,登录你的MySQL交互环境:
mysql -h localhost -P 3306 -u root -p
在显示Enter password:
输入123456(假设为你的密码),回车。其中h localhost
可以依据你的MySQL主机地址修改,若为localhost,可以不指定h参数。
现在我们执行SQL创建一个名为mydatabase
的数据库:
CREATE DATABASE mydatabase;
然后执行quit
命令退出。
PyMySQL依赖于cryptography
包的C扩展。如果在后续运行中提示缺少,可以使用下面的命令进行安装:
pip install cryptography
这里的cryptography
是一个用于加密和解密的Python库,提供了多种加密算法和工具,帮助开发者实现安全通信和数据保护。它支持对称加密、非对称加密、哈希函数、数字签名等多种加密技术。
接下来编写我们的脚本:
import pymysql# 数据库配置
config = {'host': 'localhost','port': 3306,'user': 'root','password': '123456','database': 'mydatabase'
}# 建立数据库连接
connection = pymysql.connect(**config)try:with connection.cursor() as cursor:# 创建表create_table_query = """CREATE TABLE IF NOT EXISTS users (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(255),age INT)"""cursor.execute(create_table_query)connection.commit()# 插入数据insert_query = "INSERT INTO users (name, age) VALUES (%s, %s)"users_data = [('John', 25),('Alice', 30),('Bob', 35)]cursor.executemany(insert_query, users_data)connection.commit()# 查询数据select_query = "SELECT * FROM users"cursor.execute(select_query)results = cursor.fetchall()print("查询结果:")for row in results:print(row)# 更新数据update_query = "UPDATE users SET age = %s WHERE name = %s"cursor.execute(update_query, (28, 'John'))connection.commit()# 删除数据delete_query = "DELETE FROM users WHERE name = %s"cursor.execute(delete_query, ('Bob',))connection.commit()# 再次查询数据cursor.execute(select_query)results = cursor.fetchall()print("更新后的查询结果:")for row in results:print(row)finally:# 关闭连接connection.close()
这个脚本使用了Python的PyMySQL库来与MySQL数据库进行交互,具体执行了以下操作:
-
建立数据库连接: 使用提供的配置(包括主机名、端口号、用户名、密码和数据库名)建立到MySQL数据库的连接;
-
创建表: 在数据库中创建一个名为users的表,如果这个表已经存在,则不会重复创建。表中包含三个字段:
id
(自动增长的整数主键)、name
(字符串类型,最大长度255)、age(整数类型)。 -
插入数据: 向
users
表中插入三条数据记录,分别是John(25岁)、Alice(30岁)和Bob(35岁)。 -
查询数据:从
users
表中查询所有记录,并打印出来。这是在插入数据后立即进行的,所以查询结果将显示所有刚插入的数据。 -
更新数据: 更新名为John的用户的年龄,将其从25岁改为28岁。
-
删除数据: 删除名为Bob的用户记录。
-
再次查询数据: 在更新和删除操作之后,再次从users表中查询所有记录,并打印出来。这次查询的结果将反映出对John年龄的更新和Bob记录的删除。
-
关闭数据库连接: 在所有操作完成后,脚本会关闭数据库连接,释放资源。
整个脚本展示了如何使用PyMySQL进行基本的数据库操作,包括连接数据库、执行SQL命令(创建表、插入、查询、更新、删除数据)以及最后关闭数据库连接。这些操作是数据库管理和数据处理中常见的任务。
运行后的控制套输出为:
查询结果:
(1, 'John', 25)
(2, 'Alice', 30)
(3, 'Bob', 35)
更新后的查询结果:
(1, 'John', 28)
(2, 'Alice', 30)
相关文章:

Python系列:教你使用PyMySQL操作MySQL数据库
Python系列 PyMySQL操作MySQL数据库 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csdn.net/qq_2855…...
mysql数据库管理面试题-1
1. 描述MySQL架构及其主要组件(例如存储引擎、缓存、优化器等)。 MySQL的架构可以分为三层: 客户端层:这是用户和MySQL数据库交互的接口,包括命令行工具、图形化管理工具等。 服务层:这是MySQL的核心部分…...
Linux安装zsh并配置oh-my-zsh
配置oh-my-zsh 查看当前shell安装zsh切换到zsh配置ohmysh 查看当前shell cat /etc/shells# /etc/shells: valid login shells /bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /bin/dash /usr/bin/dash安装zsh sudo apt install zsh# /etc/shells: valid login s…...

echarts(6大基础图表)的使用
目录 一、vue2挂载 二、柱状图 2.1、基础柱状图介绍 2.2、标记:最大值\最小值(markPoint)、平均值(markLine) 2.3、显示:数值显示(label)、柱子宽度(barWidth)、横向柱状图 三、折线图 3.1、标记:最大值\最小值(markPoint)、平均值(ma…...
React hooks - forwardRef+useImperativeHandle
forwardRefuseImperativeHandle React.forwardRef用法useImperativeHandle用法第三个参数的用法 React.forwardRef与useImperativeHandle配合使用注意事项 React.forwardRef用法 1.创建一个 能够接受到ref属性的React 组件。 ref 用来获取实例,但函数组件不存在实例…...

MyBatis出现:SQLSyntaxErrorException: Unknown column ‘XXX‘ in ‘field list‘
<update id"updateStudent">update tb_students set stu_name${stuName},stu_gender${stuGender},stu_age${stuAge},stu_tel${stuTel}where stu_num ${stuNum}</update> 本质上来说,是Mybatis使用上的错误,不熟悉,理…...
代码随想录算法训练营Day54 | 392.判断子序列、115.不同的子序列 | Python | 个人记录向
本文目录 392.判断子序列做题看文章 115.不同的子序列做题看文章 以往忽略的知识点小结个人体会 392.判断子序列 代码随想录:392.判断子序列 Leetcode:392.判断子序列 做题 借鉴Day53中1143.最长公共子序列的思路,最后改一下判断逻辑即可。…...
利用oracle默认事务隔离级别(提交读)提升多表联查速度
利用oracle默认事务隔离级别(提交读)提升查询速度) 背景介绍: 数据量大查询缓慢,添加太多条件,使用IN走了全表查询导致查询速度缓慢。 解决方案: 版本一: 新建临时表,在查询是将数据插入到临时表中&#…...

B/S架构+java语言+Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用?
B/S架构+java语言+Mysqladr数 据 库ADR药物不良反应监测系统源码 ADR药物不良反应监测系统有哪些作用? 药物不良反应(ADR)是指在合格药物以正常用量和用法用于预防、诊断、治疗疾病或调节生理功能时所发生的意外的、与防治目的无关的、不利或…...

Matlab中% note that Wilkinson notation (‘L1~L4~1‘) is used to specify the model
fitrm 函数的输入参数不正确,似乎出错的地方是在定义 fitrm 对象时使用了不正确的参数。 fitrm 函数的语法是这样的: rm fitrm(tbl, model, WithinDesign, withinDesign) 其中: - tbl 是一个表格,包含了待分析的数据。 - mod…...
测试测试测试
一分钟速览新闻点! 京东前副总裁蔡磊回应被指装病:没有时间、精力和能力应对 百度沈抖:主力模型免费的原因很朴素,希望大家别再天天拉表格比价格 蚂蚁集团CTO何征宇:蚂蚁一直在努力优化和提高AI的可靠性、经济性和易…...

动态规划专题
leecode 221 class Solution { public:int maximalSquare(vector<vector<char>>& matrix) {int n matrix.size();if (n 0) return 0; // 如果矩阵为空,则直接返回0 int m matrix[0].size();vector<vector<int>> ans(n, vector<i…...

.net8.0与halcon编程环境构建
1.安装vs2022 2.安装h-12.0.exe ,不要勾选复选框 3.vs2022新建wpf应用程序 4.依赖项添加项目应用,选择halcondotnet.dll 5.安装System.Drawing 安装 HalconDotNet 安装 Rti.HDevEngineDotNet 在工具箱 空白处右键 应用halcon.dll WPF控件也应用halcon.dll 6.xaml申明hal…...

文心智能体平台:快来创建你的Java学习小助理,全方位辅助学习
文章目录 一、文心智能体平台1.1平台介绍1.2智能体介绍 二、智能体创建三、体验与总结 一、文心智能体平台 文心智能体平台是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类…...

AppInventor2 表格布局的外面的黑框怎么去掉?
问:表格布局的外面的黑框怎么去掉啊? 答:这个黑框是界面设计的布局位置示意,实际 App 测试时并没有框。 来源:AppInventor2 表格布局的外面的黑框怎么去掉? - App应用开发 - 清泛IT社区,为创新…...

爬楼梯(进阶版)
思路: 没什么难的,就是一个排序的01背包问题,秒了 #include<bits/stdc.h> using namespace std;int n,m; int main(){cin>>n>>m;vector<int>dp(2000,0);dp[0]1;for(int i0;i<n;i){for(int j1;j<m;j){if(i>…...

echarts-事件
echarts部分事件 添加点击事件 添加点击事件: let options {tooltip: {},xAxis: {type: "category",data: ["d1", "d2", "d3", "d4"],},yAxis: {},series: [{type: "line",data: d1,},{type: &qu…...

备受推崇的公司文件加密文件推荐榜单
迄今为止,加密依然是最有效的用于保护数据、通讯安全的手段之一 在数字化时代,文件加密软件成为了保护个人和企业数据安全的重要工具。随着技术的不断进步,市场上涌现出了众多优秀的文件加密软件。 以下十款文件加密软件因其出色的性能、易…...

QT——QSlider实现,QT滑动控件的使用
目录 简介滑动块调节两种方法滑动条触发信号量理想滑动块运用(参考) 简介 QT中滑动条的控件叫QSlider,继承自QAbstractSlider类。 主要用途是通过滑块的滑动的方式在一定范围内调节某个值。根据调节的后得到的结果去执行一些处理,…...

【网络协议Http】Http中get,post,put,delete区别
Http协议 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。 【参考】 GET && POST 对比 关于tcp数据包:对于GET方式的请求,浏览器会把http hea…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...

【单片机期末】单片机系统设计
主要内容:系统状态机,系统时基,系统需求分析,系统构建,系统状态流图 一、题目要求 二、绘制系统状态流图 题目:根据上述描述绘制系统状态流图,注明状态转移条件及方向。 三、利用定时器产生时…...
Matlab | matlab常用命令总结
常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题
【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要: 近期,在使用较新版本的OpenSSH客户端连接老旧SSH服务器时,会遇到 "no matching key exchange method found", "n…...

ubuntu22.04有线网络无法连接,图标也没了
今天突然无法有线网络无法连接任何设备,并且图标都没了 错误案例 往上一顿搜索,试了很多博客都不行,比如 Ubuntu22.04右上角网络图标消失 最后解决的办法 下载网卡驱动,重新安装 操作步骤 查看自己网卡的型号 lspci | gre…...

保姆级【快数学会Android端“动画“】+ 实现补间动画和逐帧动画!!!
目录 补间动画 1.创建资源文件夹 2.设置文件夹类型 3.创建.xml文件 4.样式设计 5.动画设置 6.动画的实现 内容拓展 7.在原基础上继续添加.xml文件 8.xml代码编写 (1)rotate_anim (2)scale_anim (3)translate_anim 9.MainActivity.java代码汇总 10.效果展示 逐帧…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里
写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...