Python系列:教你使用PyMySQL操作MySQL数据库

news2024/9/20 0:59:07
Python系列
PyMySQL操作MySQL数据库

- 文章信息 - Author: 李俊才 (jcLee95)
Visit me at CSDN: https://jclee95.blog.csdn.net
My WebSitehttp://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方法用于获取所有行的数据。

3.2 创建游标对象

从连接对象中创建一个游标对象,用于执行SQL查询:

cursor = connection.cursor()

4. 执行SQL查询

上面介绍了,在PyMySQL中,执行SQL查询是通过游标对象(Cursor)完成的。这包括SELECT查询来获取数据,以及INSERTUPDATEDELETE查询来修改数据。接下来具体介绍如何使用PyMySQL执行这些操作。

4.1 执行SELECT查询

要执行SELECT查询,首先需要编写SQL查询语句。然后,使用游标对象的execute()方法来执行这个查询。查询结果可以通过游标提供的方法如fetchall()fetchone()来获取。
步骤:

  1. 编写查询语句:确定你需要执行的SELECT语句。
  2. 执行查询:使用游标的execute()方法执行SQL语句。
  3. 获取结果:使用fetchall()获取所有结果,或使用fetchone()获取单个结果。
query = "SELECT * FROM users"
cursor.execute(query)
results = cursor.fetchall()
for row in results:
    print(row)

在这个例子中,execute()方法执行了SQL查询,fetchall()方法获取了所有的查询结果,并且结果通过一个循环打印出来。

4.2 执行INSERTUPDATEDELETE查询

对于INSERTUPDATEDELETE操作,步骤类似于执行SELECT查询,但通常需要在执行这些操作后提交更改,以确保更改被保存到数据库中。步骤:

  1. 编写SQL语句:根据需要修改数据的类型编写相应的INSERTUPDATEDELETE语句。
  2. 执行查询:使用游标的execute()方法执行SQL语句。对于INSERTUPDATE操作,可以传递参数来避免SQL注入。
  3. 提交更改:使用连接对象的commit()方法提交更改到数据库。
query = "INSERT INTO users (name, age) VALUES (%s, %s)"
values = ('John', 25)

cursor.execute(query, values)
connection.commit()

在这个例子中,execute()方法不仅执行了INSERT查询,还通过传递参数的方式提供了要插入的数据,这有助于防止SQL注入。执行后,使用commit()方法确保更改被保存。

5. 处理查询结果

5.1 遍历查询结果

可以使用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. 一个连续的示例

现在假设你安装好了MySQLPython3环境,并安装了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()

这个脚本使用了PythonPyMySQL库来与MySQL数据库进行交互,具体执行了以下操作:

  1. 建立数据库连接: 使用提供的配置(包括主机名、端口号、用户名、密码和数据库名)建立到MySQL数据库的连接;

  2. 创建表: 在数据库中创建一个名为users的表,如果这个表已经存在,则不会重复创建。表中包含三个字段:id(自动增长的整数主键)、name(字符串类型,最大长度255)、age(整数类型)。

  3. 插入数据:users表中插入三条数据记录,分别是John(25岁)、Alice(30岁)和Bob(35岁)。

  4. 查询数据:从users表中查询所有记录,并打印出来。这是在插入数据后立即进行的,所以查询结果将显示所有刚插入的数据。

  5. 更新数据: 更新名为John的用户的年龄,将其从25岁改为28岁。

  6. 删除数据: 删除名为Bob的用户记录。

  7. 再次查询数据: 在更新和删除操作之后,再次从users表中查询所有记录,并打印出来。这次查询的结果将反映出对John年龄的更新和Bob记录的删除。

  8. 关闭数据库连接: 在所有操作完成后,脚本会关闭数据库连接,释放资源。

整个脚本展示了如何使用PyMySQL进行基本的数据库操作,包括连接数据库、执行SQL命令(创建表、插入、查询、更新、删除数据)以及最后关闭数据库连接。这些操作是数据库管理和数据处理中常见的任务。

运行后的控制套输出为:

查询结果:
(1, 'John', 25)
(2, 'Alice', 30)
(3, 'Bob', 35)
更新后的查询结果:
(1, 'John', 28)
(2, 'Alice', 30)

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

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

相关文章

Go语言GoFly框架快速新增接口/上手写代码

拿到一个新框架大家可能无从下手,因为你对框架设计思路、结构不了解,从而产生恐惧,所以我们框架是通过简单可视化界面安装,安装后即可看到效果,然后点击先点点看各个功能,看现有的功能是怎么写的&#xff0…

《QT实用小工具·六十八》基于QMenu开发的炫酷菜单栏

1、概述 源码放在文章末尾 该项目基于QMenu实现了炫酷的菜单栏效果,包含了如下功能: 1、实现了类似word菜单栏的效果,可以在菜单栏中横向添加不同的菜单 2、鼠标点击菜单可以展开菜单栏,再次点击菜单可以收起菜单栏 3、鼠标点击笑…

基础—SQL—DQL(数据查询语言)基础查询

一、引言 1、介绍: 分类全称描述DQL英文全称:Data Query Language(数据查询语言)主要是学习对数据库表中的记录进行查询的语句 2、讲解 日常的开发中或者对于一个正常的业务系统中,对于查询的操作次数是远远多于数据的增删改的频次。例如…

SFOS2:组件介绍

一、前言 在sailfish os application的开发过程中,几乎是困难重重,因为我暂未找到具有完整性、指导性、易懂性的开发文档,特别是组件的使用,现决定将自己的探究结果记录下来。因此,这篇文章只会具有参考价值&#xff0…

MS Excel: 高亮当前行列 - 保持原有格式不被改变

本文使用条件格式VBA的方法实现高亮当前行列,因为纯VBA似乎会清除原有的高亮格式。效果如下:本文图省事就使用同一种颜色了。 首先最重要的,【选中你期望高亮的单元格区域】,比如可以全选当前sheet的全部区域 然后点击【开始】-【…

关于 Spring 是什么

Spring 是什么 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃⽽庞⼤的社区,这就是它之所以能⻓久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的…

松下MINAS A6B系列旋转电机规格书--A系列

一、松下电机型号的识别方法 二、松下标准型电机型号大全 三、松下电机的规格 四、电机外观 五、XA,XB连接器 六、USB连接器 七、EtherCAT用连接器X2A、X2B 八、IO连接器X4 输入输出信号接口 九、编码器连接器 十、模拟监视器用连接器X7 十一、电源连接器以及端子台…

详解 Spark 的运行架构

一、核心组件 1. Driver Spark 驱动器节点,用于执行 Spark 任务中的 main 方法,负责实际代码的执行工作主要负责: 将用户程序转化为作业 (job)在 Executor 之间调度任务 (task)跟踪 Executor 的执行情况通过 UI 展示查询运行情况 2. Exec…

matlab工具使用记录-编辑器和命令行窗口分开还原

工具:matlab2021b 场景:在使用软件的过程中,我们误操作将matlab的编辑器单独出来了。这时候对软件进行各种操作都还原不回去。 matlab中编辑器和命令行窗口分开了如下图所示。 这时候只需要使用快捷键在编辑器窗口按CtrlshiftD,…

【错题集-编程题】dd 爱旋转(模拟)

牛客对应题目链接:dd爱旋转 (nowcoder.com) 一、分析题目 模拟题,但是需要不能直接无脑模拟,要思考⼀下规律。 顺时针旋转 180:行变换 列变换行变换、列变换的顺序颠倒不会有影响行变换的次数是个数相当于不变 二、代码 #includ…

【B站 heima】小兔鲜Vue3 项目学习笔记 Day06

文章目录 购物车本地1. 列表购物车基础数据渲染2. 列表购物车单选功能3. 列表购物车全选功能4. 列表购物车统计列表实现5. 接口-加入购物车6. 接口-删除购物车7. 退出登录-清空购物车数据8. 合并购物车到服务器(重要) 结算1. 路由配置和基础数据渲染2. 地址切换-打开弹框交互实…

【渗透测试】|文件上传

1、安装使用蚁剑 https://blog.csdn.net/weixin_42474304/article/details/116376746 1、登陆dvwa,进入初级文件上传&#xff0c;上传一句话木马文件cmd.php&#xff0c; //cmd.php <?php eval($_POST[ccit]); ?> //eval: 执行命令的函数 //ccit:一句话木马文件的参数…

刷代码随想录有感(83):贪心算法——最大子数组和

题干&#xff1a; 代码&#xff1a; class Solution { public:int maxSubArray(vector<int>& nums) {int res INT_MIN;int count 0;for(int i 0; i < nums.size(); i){count nums[i];if(count > res) res count;if(count < 0)count 0;}return res;} …

解决Android studio 一直提示下载gradle-xxx-all.zip问题

今天用AndroidStdiod打开一个新工程的时候&#xff0c;发现项目一直卡在正在下载gradle-xxx-all.zip的任务上&#xff0c;网络出奇的慢&#xff0c;即使配了VPN也无济于事&#xff0c;于是按照以往经验&#xff1a;将gradle-xxx-all.zip下载到.gradle\gradle\wrapper\dists目录…

2024年3月电子学会青少年软件编程 中小学生Python编程等级考试一级真题解析(选择题)

2024年3月Python编程等级考试一级真题解析 选择题&#xff08;共25题&#xff0c;每题2分&#xff0c;共50分&#xff09; 1、下列哪个命令&#xff0c;可以将2024转换成2024呢 A、str(2024) B、int(2024) C、float(2024) D、bool(2024) 答案&#xff1a;A 考点分析&…

【Linux】Linux环境基础开发工具_2

文章目录 四、Linux环境基础开发工具2. vimvim的常见模式 未完待续 四、Linux环境基础开发工具 2. vim vim 是Linux下的一款 多模式编辑器 &#xff0c;可以用来写代码&#xff0c;是 vi 的升级版。 此时无法输入&#xff0c;需要切换模式。 如上图&#xff0c;i 就是切换成…

数据库学习笔记1-数据库实验1

文章目录 创建表格的时候出现的一些错误查询所有的表格实验一查询单个表格分块修改大学数据库表格创建大学数据库表格系课程教师课程段授课学生选课注意吐槽 修改大学数据库表格2&#xff08;英文版本&#xff09;abcde 自建项目-在线书店数据库 创建表格的时候出现的一些错误 …

【ONE·Git || 基本用法入门】

总言 主要内容&#xff1a;主要介绍Git中常用的指令。   PS&#xff1a;多人协作与企业开发模型使用&#xff0c;此部分内容不作博文总结。             文章目录 总言1、初识Git1.1、版本控制器1.2、git安装 2、基本操作2.1、Git本地仓库2.1.1、创建Git本地仓库&…

C++【缺省参数|函数重载|引用】

目录 1 缺省参数 1.1 全缺省 1.2 半缺省 注意 1.3 应用 2 函数重载 函数重载的概念 1、参数类型不同 2、参数个数不同 3、参数类型顺序不同 3 引用 3.1 引用概念 3.2 引用特性 3.3 常引用 3.4 使用场景 3.5 传值、传引用效率比较 3.6 引用和指针的区别 1 缺…

RestTemplet 自定义消息转换器总结

在RestTemplet 请求中&#xff0c;请求发送一个 HTTP 请求时&#xff0c;RestTemplet 会根据请求中的内容类型&#xff08;Content-Type&#xff09;选择合适的 HttpMessageConverter 来处理请求体的数据。同样地&#xff0c;当服务器返回一个 HTTP 响应时&#xff0c;RestTemp…