Python连接MySQL实现增删改查详细教程

news2024/11/28 16:53:13

文章目录

  • 前言
  • 一、环境准备
  • 二、操作步骤
    • 1.安装Python依赖库
    • 2.创建测试数据表
    • 3. 编写操作数据库核心类
    • 4. 测试数据添加
    • 5. 测试数据删除
    • 6. 测试数据更新
    • 7. 测试数据查询
  • 三、完整代码
  • 总结


前言

Python语言经过了很多年的发展,生态非常丰富,热度只增不减,今天通过具体的案例与代码介绍如何使用Python来链接MySQL,并实现对MySQL的增删改查。


一、环境准备

Python3: 本文演示版本为 Python 3.8.3rc1
MySQL5: 本文演示版本为 5.6.50
Python库: pymysql,mysql.connector
系统环境: Window10

二、操作步骤

1.安装Python依赖库

命令如下:

pip3 install mysql-connector
pip3 install mysql-connector-python
pip3 install pymysql

2.创建测试数据表

SQL如下:

CREATE TABLE `student` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(20) NOT NULL,
  `gender` varchar(10) DEFAULT NULL,
  `number` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3. 编写操作数据库核心类

代码如下:

class DB:
    cursor = conn = None
    def __init__(self):
        self.initDB()

    #初始化数据库对象
    def initDB(self):
        try:
            self.conn = mysql.connector.connect(
                host = 'localhost', # 数据库地址,请根据需要修改
                user = 'root', # 数据库用户名
                port = 3306, # 数据库端口
                password = 'root', # 数据库密码
                database = 'test', # 数据库
                auth_plugin ='mysql_native_password'
            )
            self.cursor = self.conn.cursor()
        except Exception as e:
            print(e)

    # 如果为查询指令用此方法
    def query(self, sql, useDict = False):
        sql = sql.encode('utf-8')
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            if(useDict == True):
                fields = self.cursor.description
                result = self.getDictData(fields, result)
            return result
        except Exception as e:
            print(e)

    # 如果为增删改用此方法
    def execute(self, sql):
        sql = sql.encode('utf-8')
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            # 如果失败则回滚
            self.conn.rollback()
            print(e)

    # 关闭数据库
    def close(self):
        self.conn.close()
    
    """
    @description: 格式化数组,返回字典key格式
    @param: 
    @Returns: 
    """
    def getDictData(self, fields, result):
        field = []
        for i in fields:
            field.append(i[0])
        res = []
        for iter in result:
            line = {}
            for index in range(0, len(field)):
                line[field[index]] = iter[index]
            res.append(line)
        return res

4. 测试数据添加

db = DB()
# 增加数据
db.execute("insert into student(name,gender,number) value ('小红', '女', '12345'), ('小张', '男', '45678')")

看到数据库成功添加进去了数据。
在这里插入图片描述

5. 测试数据删除

db.execute("delete from student where name='小张'")

进入数据库看到小张被删除。
在这里插入图片描述

6. 测试数据更新

db.execute("update student set number = '67890' where name='小红'")

进入数据库看到小红学号被更新为67890。
在这里插入图片描述

7. 测试数据查询

students = db.query("select * from student", True)
print(students)

通过控制台可以看到打印出最新的小红的信息。
在这里插入图片描述

三、完整代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-
from pymysql import connect
import mysql.connector

class DB:

    cursor = conn = None
    def __init__(self):
        self.initDB()

    #初始化数据库对象
    def initDB(self):
        try:
            self.conn = mysql.connector.connect(
                host = 'localhost', # 数据库地址,请根据需要修改
                user = 'root', # 数据库用户名
                port = 3306, # 数据库端口
                password = 'root', # 数据库密码
                database = 'test', # 数据库
                auth_plugin ='mysql_native_password'
            )
            self.cursor = self.conn.cursor()
        except Exception as e:
            print(e)

    # 如果为查询指令用此方法
    def query(self, sql, useDict = False):
        sql = sql.encode('utf-8')
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchall()
            if(useDict == True):
                fields = self.cursor.description
                result = self.getDictData(fields, result)
            return result
        except Exception as e:
            print(e)

    # 如果为增删改用此方法
    def execute(self, sql):
        sql = sql.encode('utf-8')
        try:
            self.cursor.execute(sql)
            self.conn.commit()
        except Exception as e:
            # 如果失败则回滚
            self.conn.rollback()
            print(e)

    # 关闭数据库
    def close(self):
        self.conn.close()
    
    """
    @description: 格式化数组,返回字典key格式
    @param: 
    @Returns: 
    """
    def getDictData(self, fields, result):
        field = []
        for i in fields:
            field.append(i[0])
        res = []
        for iter in result:
            line = {}
            for index in range(0, len(field)):
                line[field[index]] = iter[index]
            res.append(line)
        return res

# 开始数据库连接
db = DB()

# 增加数据
#db.execute("insert into student(name,gender,number) value ('小红', '女', '12345'), ('小张', '男', '45678')")

#删除数据
#db.execute("delete from student where name='小张'")

#更新数据
#db.execute("update student set number = '67890' where name='小红'")

#查询数据
students = db.query("select * from student", True)
print(students)

db.close()

总结

以上就是今天要讲的内容,本文实现了Python连接MySQL实现增删改查。喜欢的话,给个关注,更多精彩,即将呈现。

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

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

相关文章

微搭问搭001-如何清空表单的数据

韩老师,我点关闭按钮后,弹窗从新打开,里面的数据还在,这个可以从新打开清除不? 点关闭的时候清掉 就是清楚不掉也?咋清掉 清掉表单内容有属性可以做到? $page.widgets.id**.value “” 就可以实…

HCIP-5.4OSPF路由聚合、缺省路由

1、路由聚合 OSPF 是一种链路状态路由协议,因此 OSPF路由器不传输路由,而是传输链路状态信息。因此,OSPF 路由通过汇总 LSA 来控制链路状态信息的传输,从而减小 LSDB 数据库的大小,进而控制路由的汇总。 由于OSPF路由…

Object对象键值的输出循序到底如何排列的?

1.日常摸鱼看八股 今天又是复习八股文的一天,发现还是彻底懂得原理才好和面试官吹牛批呀。 接着来看看我chat大宝贝的回答: 在现代浏览器中,Object 对象的键值输出循序是比较稳定的,通常是按照如下顺序输出: 所有的数…

打怪升级之如何发送HEX进制的数据出去

Hex数据老大难 不少人都困扰于如何将电脑中读取到的string类型的数据变成整形发送出去。一半来说,不论你调用的通信方式是串口的还是网络的,亦或是PCIE的,其在电脑端的实际情况都是以系统API的形式呈现的。而系统API函数提供的接口&#xff…

项目实战典型案例23——-注册上nacos上的部分服务总是出现频繁掉线的情况

注册上nacos上的部分服务总是出现频繁掉线的情况一:背景介绍二:思路&方案解决问题过程涉及到的知识nacos服务注册和服务发现一:背景介绍 spring cloud项目通过nacos作为服务中心和配置中心,出现的问题是其中几个服务总是出现…

【电子通识】案例:从YS-CH341T USB转IIC和UART模块使用学习如何找资料

最近在调一个充电芯片,要用到IIC与充电芯片通信来读取和写入充电芯片寄存器,控制充电芯片的各种参数。从以前老员工那里捡到一个这样的模块,模块背面写了YS-CH341T。看着有IIC通信的样子,所以先在网上找一下资料。首先先在网上找到…

npm安装依赖包:405 Method Not Allowed...

运用npm安装依赖包时报错,错误如下。 解决思路: 关注到错误信息上写明了 Method Not Allowed,其后注明了 GET请求以及一个url,说明极有可能是不允许向这个路由发送GET请求; 在浏览器中尝试打开这个地址,结…

在分析了共50亿美元的加密融资之后,我们发现了这些

对加密市场嗅觉敏锐的玩家来说,市场中项目融资是不得不关注的选项,不少优质项目拿到了巨额融资之后,被大家所关注,在20-21年期间,行业内也出现了不少一级机构,布局早期项目,获取时代红利已经成为…

圆桌(满足客人空座需求,合理安排客人入座圆桌,准备最少的椅子)

CSDN周赛第30期第四题算法解析。 (本文获得CSDN质量评分【91】)【学习的细节是欢悦的历程】Python 官网:https://www.python.org/ Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单…… 地址:https://lq…

什么是业务运营?关键组成部分有哪些?

企业领导者使用收入运营和智能软件等技术来分析买家的不同接触点。这些见解决定了客户互动的成败,从而改善了业务运营,从而带来了成功。 什么是业务运营? 业务运营包括企业为保持盈利而执行的一系列日常任务。虽然这些任务可能因业务类型或行…

主辅助服务市场出清模型研究【旋转备用】(Matlab代码实现)

👨‍🎓个人主页:研学社的博客💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密…

【已解决】Python的坑:os.system()运行带有空格的长路径和双引号参数有bug

在Python代码里运行DOS命令,可以使用os库的os.system()函数。其用法很简单,需要注意的是os.system不会返回输出的结果赋予一个变量。今天我发现了一个bug:当DOS命令行带有双引号路径、双引号参数时,os.system()运行的结果总是显示…

带你认识什么是485通信

在现代工业控制系统中,常常需要实现分布式控制,而分布式控制需要实现不同设备之间的通信。其中,485通信协议是一种被广泛使用的通信协议之一。1. 介绍A. 485通信的定义485通信协议是一种串行通信协议,也被称为RS-485。它是由美国电…

300. 最长递增子序列——【Leetcode每日刷题】

300. 最长递增子序列 给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。例如,[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子…

leetcode 1648. 销售价值减少的颜色球

1648. 销售价值减少的颜色球这道题不知为何总想记录下来,思路很简单,但是实现总是出错,这也许就是要记录的原因。再一个觉得题解写的比较难以理解,所以再细致一些解析。希望可以帮到实在搞不懂的同学 思路: 目的:我们…

聚观早报|谷歌发布最大视觉语言模型;王兴投资王慧文ChatGPT项目

今日要闻:谷歌发布全球最大视觉语言模型;马斯克预计Twitter下季度现金流转正;王兴投资王慧文ChatGPT项目;美国拟明年 11 月开展载人绕月飞行;慧与科技宣布收购Athonet谷歌发布全球最大视觉语言模型 近日,来…

RocketMQ重复消费的症状以及解决方案

RocketMQ重复消费的症状以及解决方案 生产消息时重复 症状 当一条消息已被成功发送到 消费者 并完成持久化,此时出现了网络闪断或者客户端宕机,导致服务端对客户端应答失败。 如果此时 生产者 意识到消息发送失败并尝试再次发送消息,消费者…

学习 Python 之 Pygame 开发魂斗罗(十一)

学习 Python 之 Pygame 开发魂斗罗(十一)继续编写魂斗罗1. 改写主类函数中的代码顺序2. 修改玩家初始化3. 显示玩家生命值4. 设置玩家碰到敌人死亡5. 设置敌人子弹击中玩家6. 修改updatePlayerPosition()函数逻辑继续编写魂斗罗 在上次的博客学习 Pytho…

【Flutter从入门到入坑】Flutter 知识体系

学习 Flutter 需要掌握哪些知识? 终端设备越来越碎片化,需要支持的操作系统越来越多,从研发效率和维护成本综合考虑,跨平台开发一定是未来大前端的趋势,我们应该拥抱变化。而 Flutter 提供了一套彻底的移动跨平台方案…

【AlgorithmTraining】06:STL容器使用与练习(上)

STL容器的使用与练习(上) OVERVIEWSTL容器的使用与练习(上)string类1.vector动态数组:(1)vector动态一维数组:(2)vector动态二维数组:2.deque双端…