pymysql进行数据库各项基础操作

目录

  • 1、mysql数据库简介
  • 2、基于mysql数据库的准备工作
  • 3、通过pymysql进行表的创建
  • 4、通过pymysql进行数据插入
  • 5、通过pymysql进行数据修改
  • 6、通过pymysql进行数据查询
  • 7、通过pymysql进行数据删除

本文内容是通过pymysql来进行时数据库的各项基础操作。
在这里插入图片描述

1、mysql数据库简介

  • 功能齐全的数据库管理系统:MySQL是最流行的开源关系数据库管理系统之一,具有完整数据库功能和组件。
  • 客户端-服务器架构:MySQL使用常见的客户端-服务器模型,需要一个运行的数据库服务器,并通过网络或本地连接方式供客户端访问。
  • 支持高并发和大数据量:MySQL设计用于处理大型数据库和高并发用户,支持复制、事务、ACID、多用户和多线程等企业级功能。
  • 管理和配置:需要配置和管理数据库服务器(如用户管理、性能调优、安全设置等)。
  • 用途:广泛用于网站、在线应用程序、企业解决方案等需要处理大量数据和用户的场景。

附注如下:

mysql同我们之前文章中提到的SQLite有什么区别和不同呢? SQLite3进行数据库各项常用操作

SQLite是一个轻量级、嵌入式的数据库,适合简单的单用户应用或本地存储,而MySQL是一个功能更全面的数据库服务器,适合需要处理复杂查询、多用户访问和高并发的应用。

使用时选择哪一个呢?主要取决于应用的规模、用户数量和性能要求:对于轻量级、便携式应用或者快速开发环境,选择SQLite;对于需要强大数据库功能、高可扩展性和远程访问支持的企业级应用,选择MySQL会更加合适。

下面进入pymysql进行各项基础操作的正题:

2、基于mysql数据库的准备工作

值得一说的是,在本文的数据库研究中,我们使用的是一款名为Navicat Premium 的管理工具。
在这里插入图片描述
我们通过Navicat Premium建立数据库(名称为:mhdata);表的名为books。
在这里插入图片描述

3、通过pymysql进行表的创建

我们要创建一个什么样的表呢?

我们在之前的案例中 SQLite3进行数据库各项常用操作使用了id和name两列结构数据进行了研究。现在我们在原来的基础上,进行(id, name, category, price, publish_time )的结构创建。

代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mhdata")
# 使用 cursor() 方法创建一个游标对象 cursor
cursor = db.cursor()
# 使用 execute() 方法执行 SQL,如果表存在则删除
cursor.execute("DROP TABLE IF EXISTS books")
# 使用预处理语句创建表
sql = """
CREATE TABLE books (
  id int(8) NOT NULL AUTO_INCREMENT,
  name varchar(50) NOT NULL,
  category varchar(50) NOT NULL,
  price decimal(10,2) DEFAULT NULL,
  publish_time date DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
"""
# 执行SQL语句
cursor.execute(sql)
# 关闭数据库连接
db.close()

注意代码中使用的db = pymysql.connect(host=“localhost”, user=“root”, password=“123456”, database=“mhdata”)语句里的四个参数,按照自己的情况进行输入。

本例子是假设你已经下载了类似于Navicat Premium的数据库管理软件,并在里面创建了一个数据库,我们这里的数据库名字为”mhdata“。

下面我们执行程序,运行成功后,可以打开数据库管理软件----Navicat Premium,找到我们的数据库,可以看到在mhdata数据库下有一个表,表中有个名为books的子表,双击books后,就可以看到右边界面有我们程序设置好的五个分类(id, name, category, price, publish_time ),因为每个分类下都没有对应数据输入,所以用N/A进行了表示:
在这里插入图片描述
到这里,该代码就执行成功了。

4、通过pymysql进行数据插入

现在我们想在上面创建好的表中插入数据,怎么进行操作呢?
代码如下

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mhdata",charset="utf8")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 数据列表
data = [("语文课本",'语文','79.80','2024-1-1'),
        ("数学课本",'数学','79.80','2024-2-2'),
        ("英语课本",'英语','98.00','2024-3-3'),
        ("物理课本",'物理','69.80','2024-4-4'),
        ("化学课本",'化学','69.80','2024-5-5'),
        ]
try:
    # 执行sql语句,插入多条数据
    cursor.executemany("insert into books(name, category, price, publish_time) values (%s,%s,%s,%s)", data)
    # 提交数据
    db.commit()
except:
    # 发生错误时回滚
    db.rollback()

# 关闭数据库连接
db.close()

执行上面代码后,数组中data的信息就插入到我们的books表格中了。
再次打开Navicat Premium,找到books表格,如下所示:
在这里插入图片描述
我们根据输出结果可以看到books中的信息是数组data 循环两次的结果,这是因为我们将代码执行了两次的原因。

5、通过pymysql进行数据修改

比如现在我们想要id为1对应的一行信息中publish_time进行修改,将其改为"2022-10-10",那么怎么操作呢?

操作代码如下:

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mhdata",charset="utf8")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 数据列表
data = ("2022-10-10",1)
try:
    # 执行sql语句,修改一条数据
    cursor.execute("UPDATE books SET publish_time = %s WHERE id = %s", data)
    # 提交数据
    db.commit()
except:
    # 发生错误时回滚
    db.rollback()

# 关闭数据库连接
db.close()

运行结果展示如下,通过结果我们可以看到id为1对应的一行信息中publish_time已经成功改为"2022-10-10"。
在这里插入图片描述

关于代码中cursor.execute(“UPDATE books SET publish_time = %s WHERE id = %s”, data)的解释

  • 这行代码是在执行一个SQL更新操作,用于更新数据库中的表。具体到这个例子中,它通过使用cursor.execute()方法,更新books表中的一条记录(也可以多条)。
  • 这里的"UPDATE books SET publish_time = %s WHERE id = %s"是一个参数化的SQL更新语句,用于更新满足特定条件(WHERE id = %s)的记录。在这个语句中,%s是占位符,代表将要被替换的值,使用这种参数化查询的方式可以提高SQL语句的安全性,避免SQL注入攻击。
  • 参数data是一个元组(tuple),包含了要替代上述SQL语句中占位符%s的值。具体来说,假设data是这样一个元组:(“2023-04-01”, 1)。
  • 第一个元素"2023-04-01"将替换第一个%s,表示将publish_time更新为2023-04-01。
  • 第二个元素1将替换第二个%s,指定了这个操作应用于id字段值为1的记录。
    综合来看,整条语句的作用是:在books表中,将id值为1的记录的publish_time字段更新为"2023-04-01"。

6、通过pymysql进行数据查询

现在我们将查询表books中category类别下为语文相关数据

代码显示为:

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mhdata",charset="utf8")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 数据列表
data = ("语文")
# 执行sql语句,修改一条数据
cursor.execute("SELECT * FROM books WHERE category = %s", data)
myresult = cursor.fetchall()
# 将需要查询到的数据打印出来
for x in myresult:
  print(x)

# 关闭数据库连接
db.close()

代码执行后,我们可以看到程序打印出来的结果:

(1, '语文课本', '语文', Decimal('79.80'), datetime.date(2022, 10, 10))
(6, '语文课本', '语文', Decimal('79.80'), datetime.date(2024, 1, 1))

7、通过pymysql进行数据删除

现在我们将删除表books中category类别下为数学相关数据

代码显示为:

import pymysql

# 打开数据库连接
db = pymysql.connect(host="localhost", user="root", password="123456", database="mhdata",charset="utf8")
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# 数据列表
data = ("数学")
# 执行sql语句,删除一条数据
cursor.execute("DELETE FROM books WHERE category = %s", data)
# 关闭数据库连接
db.close()

代码执行后,我们可以看到books表中已经将category 为数学的相关行删除了:
在这里插入图片描述
截止到这里,大家就已经对mysql、基于pymysql的表的插入、表的修改、表的查询、表的删除有了基本的了解,多多练习实践就可以对基于pymysql的数据库进行操作了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西南交大swjtu算法实验4.2|分治

1. 实验目的 编写一个分治算法来搜索 m*n 矩阵 matrix 中的一个目标值 target,该矩阵 具有以下特性:每行的元素从左到右升序排列。每列的元素从上到下升序排列。 通过该实例熟悉分治算法的分析求解过程,时间复杂度分析方法,以及如何设计 分治…

基于深度学习的图书管理推荐系统(python版)

基于深度学习的图书管理推荐系统 1、效果图 1/1 [] - 0s 270ms/step [13 11 4 19 16 18 8 6 9 0] [0.1780757 0.17474999 0.17390694 0.17207369 0.17157653 0.168248440.1668652 0.16665359 0.16656876 0.16519257] keras_recommended_book_ids深度学习推荐列表 [9137…

ES6 学习(一)-- 基础知识

文章目录 1. 初识 ES62. let 声明变量3. const 声明常量4. 解构赋值 1. 初识 ES6 ECMAScript6.0(以下简称ES6)是JavaScript语言的下一代标准,已经在2015年6月正式发布了。它的目标,是使得」JavaScript语言可以用来编写复杂的大型应用程序,成为…

C之易错注意点转义字符,sizeof,scanf,printf

目录 前言 一:转义字符 1.转义字符顾名思义就是转换原来意思的字符 2.常见的转义字符 1.特殊\b 2. 特殊\ddd和\xdd 3.转义字符常错点----计算字符串长度 注意 : 如果出现\890,\921这些的不是属于\ddd类型的,,不是一个字符…

车载电子电器架构 —— 局部网络管理汇总

车载电子电器架构 —— 局部网络管理汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

在 Linux(红帽系列) 中使用 yum 工具安装 Nginx 及 Nginx 的常用命令与 Nginx 服务的启动和停止

官方文档:https://nginx.org/en/linux_packages.html 在红帽系列的 Linux 发行版中,使用 yum 工具帮助我们管理和下载安装 rpm 软件包,并帮助我们自动解决 rpm 软件包之间的依赖关系。 关于 yum 可以参考:https://www.yuque.com/u…

ROS2 学习(一)ROS2 简介与基本使用

参考引用 动手学 ROS2 1. ROS2 介绍与安装 1.1 ROS2 的历史 ROS(Robot Operating System,机器人操作系统),但 ROS 本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac&…

无需mac系统申请ios证书的傻瓜式教程

在hbuilderx云打包,无论是开发测试还是打生产包,都需要p12格式的私钥证书、证书密码和证书profile文件。这三样东西都是必须的,点击hbuilderx的官网链接,它创建证书的第一步,就需要使用mac系统的钥匙串访问去生成一个c…

设置asp.net core WebApi函数请求参数可空的两种方式

以下面定义的asp.net core WebApi函数为例,客户端发送申请时,默认三个参数均为必填项,不填会报错,如下图所示: [HttpGet] public string GetSpecifyValue(string param1,string param2,string param3) {return $"…

【Qt】窗口

目录 一、概述二、菜单栏(QMenuBar)三、工具栏(QToolBar)四、状态栏(QStatusBar)五、浮动窗口六、对话框 一、概述 Qt窗口是通过QMainWindow类来实现的。 QMainWindow是一个为用户提供主窗口程序的类&…

用1/10的成本为节点运营者启用零认证下载

在Sui网络上运行的验证节点和完整节点需要具有最高水平的可靠性和运行时间,以便提供高吞吐量及区块链的可扩展性。可靠地运行有状态应用的关键部分,确保可以相对轻松地进行硬件故障转移。如果磁盘故障或其他类型的故障影响到运行验证节点的机器&#xff…

最新2024年增强现实(AR)营销指南(完整版)

AR营销是新的最好的东西,就像元宇宙和VR营销一样。利用AR技术开展营销活动可以带来广泛的利润优势。更不用说,客户也喜欢AR营销! 如果企业使用AR,71%的买家会更多地购物。40%的购物者准备在他们可以在AR定制的产品上花更多的钱。…

记录实现水平垂直居中的5种方法

记录块级元素实现水平垂直居中的方法&#xff0c;效果如图。 <div class"parent"><div class"child">居中元素</div> </div><style> .parent {position: relative;width: 600px;height: 300px;background-color: #679389; …

每日一练 找无重复字符的最长子串

我们来看下这个题目&#xff0c;我们要统计的是不重复的子串&#xff0c;我们可以使用“滑动窗口法”&#xff0c;其实我们很容易就能想到思路。 我们的左窗代表我们目前遍历的开始&#xff0c;即我们遍历的子串的开头&#xff0c;右窗从左窗开始进行遍历&#xff0c;每次遍历…

【Redis持久化】RDB、ROB介绍和使用

RDB、ROB介绍和使用 引言ROB介绍配置指令介绍使用指令&#xff1a;dump文件修复指令快照禁用 AOF工作流程&#xff1a;文件重写&#xff1a;三种写回策略&#xff1a; 混合使用 引言 持久化的目的&#xff0c;其实就是在Redis重启或者中途崩溃的时候能够依靠自身恢复数据&…

Electron 读取本地配置 增加缩放功能(ctrl+scroll)

最近&#xff0c;一个之前做的electron桌面应用&#xff0c;需要增加两个功能&#xff1b;第一是读取本地的配置文件&#xff0c;然后记载配置文件中的ip地址&#xff1b;第二就是增加缩放功能&#xff1b; 第一&#xff0c;配置本地文件 首先需要在vue工程根目录中&#xff0…

蓝桥杯 本质上升序列

题目描述: 小蓝特别喜欢单调递增的事物。 在一个字符串中&#xff0c;如果取出若干个字符&#xff0c;将这些字符按照在字符串中的顺序排列后是单调递增的&#xff0c;则成为这个字符串中的一个单调递增子序列。 例如&#xff0c;在字符串 lanqiao 中&#xff0c;如果取出字符…

二维码门楼牌管理应用平台建设:构建智慧社区新生态

文章目录 前言一、二维码门楼牌管理应用平台概述二、公益报名功能的实现方式三、二维码门楼牌管理应用平台在智慧社区建设中的作用四、结论与展望 前言 随着科技的快速发展&#xff0c;智慧城市建设已成为现代城市管理的重要方向。二维码门楼牌管理应用平台作为智慧社区建设的…

算法系列--动态规划--特殊的状态表示--分析重复子问题

&#x1f495;"轻舟已过万重山!"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–算法系列–动态规划–特殊的状态表示–分析重复子问题 大家好,今天为大家带来的是算法系列--动态规划--特殊的状态表示--分析重复子问题 一.组合总数IV 链接…

Mybatis的动态SQL~

MyBatis有一个强大特性就是它的动态SQL。在实际项目开发中&#xff0c;经常需要根据不同条件拼接SQL语句&#xff0c;拼接时还要确保不能忘了必要的空格&#xff0c;有时候还要注意省掉列名列表最后的逗号...等等。在使用JDBC 或其他类似持久层框架操作数据库时&#xff0c;处理…