返回顶部
首页 > 资讯 > 数据库 >【python】接入MySQL实际操作案例
  • 950
分享到

【python】接入MySQL实际操作案例

pythonmysql开发语言 2023-10-28 06:10:53 950人浏览 安东尼
摘要

python程序接入Mysql数据库 文章目录 Python程序接入MySQL数据库建库建表接入MySQL代码实操插入数据删除数据更新数据查询数据 案例讲解 在 pyth

python程序接入Mysql数据库

文章目录


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

建库建表

-- 创建名为hrs的数据库并指定默认的字符集create database `hrs` default character set utf8mb4;-- 切换到hrs数据库use `hrs`;-- 创建部门表create table `tb_dept`(`dno` int not null comment '编号',`dname` varchar(10) not null comment '名称',`dloc` varchar(20) not null comment '所在地',primary key (`dno`));-- 插入4个部门insert into `tb_dept` values     (10, '会计部', '北京'),    (20, '研发部', '成都'),    (30, '销售部', '重庆'),    (40, '运维部', '深圳');-- 创建员工表create table `tb_emp`(`eno` int not null comment '员工编号',`ename` varchar(20) not null comment '员工姓名',`job` varchar(20) not null comment '员工职位',`mgr` int comment '主管编号',`sal` int not null comment '员工月薪',`comm` int comment '每月补贴',`dno` int not null comment '所在部门编号',primary key (`eno`),constraint `fk_emp_mgr` foreign key (`mgr`) references tb_emp (`eno`),constraint `fk_emp_dno` foreign key (`dno`) references tb_dept (`dno`));-- 插入14个员工insert into `tb_emp` values     (7800, '张三丰', '总裁', null, 9000, 1200, 20),    (2056, '乔峰', '分析师', 7800, 5000, 1500, 20),    (3088, '李莫愁', '设计师', 2056, 3500, 800, 20),    (3211, '张无忌', '程序员', 2056, 3200, null, 20),    (3233, '丘处机', '程序员', 2056, 3400, null, 20),    (3251, '张翠山', '程序员', 2056, 4000, null, 20),    (5566, '宋远桥', '会计师', 7800, 4000, 1000, 10),    (5234, '郭靖', '出纳', 5566, 2000, null, 10),    (3344, '黄蓉', '销售主管', 7800, 3000, 800, 30),    (1359, '胡一刀', '销售员', 3344, 1800, 200, 30),    (4466, '苗人凤', '销售员', 3344, 2500, null, 30),    (3244, '欧阳锋', '程序员', 3088, 3200, null, 20),    (3577, '杨过', '会计', 5566, 2200, null, 10),    (3588, '朱九真', '会计', 5566, 2500, null, 10);

接入MySQL

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

pip install pymysql cryptography

使用pymysql操作 MySQL 的步骤如下所示:

  1. 创建连接。MySQL 服务器启动后,提供了基于 tcp (传输控制协议)的网络服务。我们可以通过pymysql模块的connect函数连接 MySQL 服务器。在调用connect函数时,需要指定主机(host)、端口(port)、用户名(user)、口令(passWord)、数据库(database)、字符集(charset)等参数,该函数会返回一个Connection对象。
  2. 获取游标。连接 MySQL 服务器成功后,接下来要做的就是向数据库服务器发送 SQL 语句,MySQL 会执行接收到的 SQL 并将执行结果通过网络返回。要实现这项操作,需要先通过连接对象的cursor方法获取游标(Cursor)对象。
  3. 发出 SQL。通过游标对象的execute方法,我们可以向数据库发出 SQL 语句。
  4. 如果执行insertdeleteupdate操作,需要根据实际情况提交或回滚事务。因为创建连接时,默认开启了事务环境,在操作完成后,需要使用连接对象的commitrollback方法,实现事务的提交或回滚,rollback方法通常会放在异常捕获代码块except中。如果执行select操作,需要通过游标对象抓取查询的结果,对应的方法有三个,分别是:fetchonefetchmanyfetchall。其中fetchone方法会抓取到一条记录,并以元组或字典的方式返回;fetchmanyfetchall方法会抓取到多条记录,以嵌套元组或列表装字典的方式返回。
  5. 关闭连接。在完成持久化操作后,请不要忘记关闭连接,释放外部资源。我们通常会在finally代码块中使用连接对象的close方法来关闭连接。

代码实操

下面,我们通过代码实操的方式为大家演示上面说的五个步骤。

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

说明:上面的127.0.0.1称为回环地址,它代表的是本机。下面的guest是我提前创建好的用户,该用户拥有对hrs数据库的insertdeleteupdateselect权限。我们不建议大家在项目中直接使用root超级管理员账号访问数据库,这样做实在是太危险了。我们可以使用下面的命令创建名为guest的用户并为其授权。

create user 'guest'@'%' identified by 'Guest.618';grant insert, delete, update, select on `hrs`.* to 'guest'@'%';

如果要插入大量数据,建议使用游标对象的executemany方法做批处理(一个insert操作后面跟上多组数据),大家可以尝试向一张表插入10000条记录,然后看看不使用批处理一条条的插入和使用批处理有什么差别。游标对象的executemany方法第一个参数仍然是 SQL 语句,第二个参数可以是包含多组数据的列表或元组。

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

说明:如果不希望每次 SQL 操作之后手动提交或回滚事务,可以connect函数中加一个名为autocommit的参数并将它的值设置为True,表示每次执行 SQL 成功后自动提交。但是我们建议大家手动提交或回滚,这样可以根据实际业务需要来构造事务环境。如果不愿意捕获异常并进行处理,可以在try代码块后直接跟finally块,省略except意味着发生异常时,代码会直接崩溃并将异常栈显示在终端中。

更新数据
import pymysqlno = int(input('部门编号: '))name = input('部门名称: ')location = input('部门所在地: ')# 1. 创建连接(Connection)conn = pymysql.connect(host='127.0.0.1', port=3306,                       user='guest', password='Guest.618',                       database='hrs', charset='utf8mb4')try:    # 2. 获取游标对象(Cursor)    with conn.cursor() as cursor:        # 3. 通过游标对象向数据库服务器发出SQL语句        affected_rows = cursor.execute(            'update `tb_dept` set `dname`=%s, `dloc`=%s where `dno`=%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()
查询数据
  1. 查询部门表的数据。
import pymysql# 1. 创建连接(Connection)conn = pymysql.connect(host='127.0.0.1', port=3306,                       user='guest', password='Guest.618',                       database='hrs', charset='utf8mb4')try:    # 2. 获取游标对象(Cursor)    with conn.cursor() as cursor:        # 3. 通过游标对象向数据库服务器发出SQL语句        cursor.execute('select `dno`, `dname`, `dloc` 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()

说明:上面的代码中,我们通过构造一个while循环实现了逐行抓取查询结果的操作。这种方式特别适合查询结果有非常多行的场景。因为如果使用fetchall一次性将所有记录抓取到一个嵌套元组中,会造成非常大的内存开销,这在很多场景下并不是一个好主意。如果不愿意使用while循环,还可以考虑使用iter函数构造一个迭代器来逐行抓取数据,有兴趣的读者可以自行研究。

  1. 分页查询员工表的数据。
import pymysqlpage = int(input('页码: '))size = int(input('大小: '))# 1. 创建连接(Connection)con = pymysql.connect(host='127.0.0.1', port=3306,                      user='guest', password='Guest.618',                      database='hrs', charset='utf8')try:    # 2. 获取游标对象(Cursor)    with con.cursor(pymysql.cursors.DictCursor) as cursor:        # 3. 通过游标对象向数据库服务器发出SQL语句        cursor.execute(            'select `eno`, `ename`, `job`, `sal` from `tb_emp` order by `sal` desc limit %s,%s',            ((page - 1) * size, size)        )        # 4. 通过游标对象抓取数据        for emp_dict in cursor.fetchall():            print(emp_dict)finally:    # 5. 关闭连接释放资源    con.close()

案例讲解

下面我们为大家讲解一个将数据库表数据导出到 excel 文件的例子,我们需要先安装openpyxl三方库,命令如下所示。

pip install openpyxl

接下来,我们通过下面的代码实现了将数据库hrs中所有员工的编号、姓名、职位、月薪、补贴和部门名称导出到一个 Excel 文件中。

import openpyxlimport pymysql# 创建工作簿对象workbook = openpyxl.Workbook()# 获得默认的工作表sheet = workbook.active# 修改工作表的标题sheet.title = '员工基本信息'# 给工作表添加表头sheet.append(('工号', '姓名', '职位', '月薪', '补贴', '部门'))# 创建连接(Connection)conn = pymysql.connect(host='127.0.0.1', port=3306,                       user='guest', password='Guest.618',                       database='hrs', charset='utf8mb4')try:    # 获取游标对象(Cursor)    with conn.cursor() as cursor:        # 通过游标对象执行SQL语句        cursor.execute(            'select `eno`, `ename`, `job`, `sal`, coalesce(`comm`, 0), `dname` '            'from `tb_emp` natural join `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()

大家可以参考上面的例子,试一试把 Excel 文件的数据导入到指定数据库的指定表中,看看是否可以成功。

来源地址:https://blog.csdn.net/No_Name_Cao_Ni_Mei/article/details/134028260

您可能感兴趣的文档:

--结束END--

本文标题: 【python】接入MySQL实际操作案例

本文链接: https://lsjlt.com/news/513921.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 【python】接入MySQL实际操作案例
    Python程序接入MySQL数据库 文章目录 Python程序接入MySQL数据库建库建表接入MySQL代码实操插入数据删除数据更新数据查询数据 案例讲解 在 Pyth...
    99+
    2023-10-28
    python mysql 开发语言
  • python3连接mysql实际操作
    下文给大家带来关于python3连接mysql实际操作,感兴趣的话就一起来看看python3连接mysql实际操作这篇文章吧,相信看完对大家多少有点帮助吧。python3 连接mysql数据库,执行操作。环...
    99+
    2024-04-02
  • python操作Mysql实例
    本文介绍了Python操作mysql,执行SQL语句,获取结果集,遍历结果集,取得某个字段,获取表字段名,将图片插入数据库,执行事务等各种代码实例和详细介绍。 实例1、获取MYSQL的版本 #!/usr/bin/env python   i...
    99+
    2023-01-31
    实例 操作 python
  • 实例操作MySQL短链接
    MySQL短链接怎么设置 1.查看mysql连接数语句命令: 2.首先作为超级用户登录到MYSQL,注意必须是超级用户,否则后面会提示没有修改权限。 3.按回车键执行后显示目前的超时时间: 4.显示的...
    99+
    2024-04-02
  • 服务器操作系统标准化:实际应用案例
    服务器操作系统标准化概述 服务器操作系统标准化是一种将服务器系统环境统一到既定标准下的管理实践。其核心目标是通过自动化和集中管理,减少系统配置和管理的差异性,从而简化操作、提升效率和保障系统安全性。 标准化的好处 服务器操作系统标准化可...
    99+
    2024-02-29
    服务器操作系统 标准化 实践案例
  • win7系统一键还原系统的案例实际操作实例教程
    经过一段时间的使用,Win7电脑的系统运行速度会减缓,甚至可能出现一些问题。重装系统可以解决此难点,但是又不肯交到别人安裝,本身又不易安裝,怎么办呢事实上win7内嵌一键还原,可以用一键还原来重装系统。下边就一起来看一下win7一键还原系统...
    99+
    2023-07-10
  • MySQL操作日志查看的实际操作步骤
    本篇内容介绍了“MySQL操作日志查看的实际操作步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!  对m...
    99+
    2024-04-02
  • Python 操作MySQL详解及实例
    Python 操作MySQL详解及实例 使用Python进行MySQL的库主要有三个,Python-MySQL(更熟悉的名字可能是MySQLdb),PyMySQL和SQLAlchemy。 Python-My...
    99+
    2022-06-04
    详解 实例 操作
  • MySQL时间戳的作用及实际应用案例分析
    MySQL时间戳的作用及实际应用案例分析 时间戳(Timestamp)在MySQL数据库中是一种非常重要且常用的数据类型,用于存储日期和时间信息。它能够记录数据的创建时间、修改时间等关...
    99+
    2024-03-15
    mysql 时间戳 应用案例
  • Python语法的实际应用操作
    本篇内容介绍了“Python语法的实际应用操作”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 元组用(),list用[],元祖不能修改,主要...
    99+
    2023-06-17
  • c++连接mysql入门案例
    目录前言环境与前期准备过程与步骤结果前言 本文介绍c++使用mysql数据库连接的前期准备,以及如何在代码中实现简单的数据库操作。 环境与前期准备 操作系统:windows10 ID...
    99+
    2022-11-16
    c++连接mysql c++连接mysql入门 c++ mysql
  • Mysql 5.7 Gtid内部实际案例分析
    本篇内容介绍了“Mysql 5.7 Gtid内部实际案例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!...
    99+
    2024-04-02
  • Python嵌入C/C++创建字典的实际操作过程
    本篇内容介绍了“Python嵌入C/C++创建字典的实际操作过程”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果你想用Python嵌入C/...
    99+
    2023-06-17
  • MySQL的调优思路和实际操作
    这篇文章主要讲解了“MySQL的调优思路和实际操作”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“MySQL的调优思路和实际操作”吧! 调优思路: 1.设...
    99+
    2024-04-02
  • mysql练习案例(实操)
    最近想要在回去复习mysql语句,就在网上找了一些案例练习,起初找得都是零零散散的,后面参考这篇博客做出了一个实操案例。Eric_Squirrel:mysql学生表经典案例50题。 首先是建表,我用的是mysql5.7,基本上没有问题 建...
    99+
    2016-09-10
    mysql练习案例(实操)
  • mysql多表查询的实际案例分析
    本文主要给大家介绍mysql多表查询的实际案例分析,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下mysql多表查询的实际案例分析吧。#案例:选中ci...
    99+
    2024-04-02
  • python实操案例分析
    本篇内容主要讲解“python实操案例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python实操案例分析”吧!看到这个先思考,自己怎么输出他?为什么它有颜色?特殊符号去哪找?特殊符号在符...
    99+
    2023-06-29
  • Python实现历史记录功能(实际案例)
    目录1、如何实现用户的历史记录功能(最多n条)2、代码演示1、如何实现用户的历史记录功能(最多n条) 实际案例: 很多应用程序都有浏览用户的历史记录的功能, 例如: 浏览器可以查看最...
    99+
    2024-04-02
  • MySQL中对数据的操作案例
    小编给大家分享一下MySQL中对数据的操作案例,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、增加数据普通的插入INSERT ...
    99+
    2024-04-02
  • Python函数在实际操作中获取帮助的方案是什么
    本篇文章为大家展示了Python函数在实际操作中获取帮助的方案是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。Python函数作为计算机语言广泛应用的一种语言,如果你想在用Python编写运行H...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作