首页 > 数据库 >python操作mysql

python操作mysql

时间:2025-01-22 15:00:11浏览次数:3  
标签:err no python 游标 pymysql cursor mysql 操作 conn

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

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

pip install pymysql cryptography

主要流程:
创建链接—>获取游标---->发出sql---->结果执行---->关闭连接
下面进入代码实战
插入操作

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

# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='root', password='123456',
                       database='db2', charset='utf8mb4')
try:
    # 2. 获取游标对象(Cursor)
    with conn.cursor() as cursor:
        # 3. 通过游标对象向数据库服务器发出SQL语句
        cursor.execute('select `no`, `name`, `location` 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()

批量插入

import pymysql

# 提示用户输入多条部门信息
data_list = []
while True:
    no = input('请输入部门编号(输入q结束): ')
    if no.lower() == 'q':
        break
    name = input('请输入部门名称: ')
    location = input('请输入部门所在地: ')
    # 将输入的数据存储为元组并添加到列表中
    data_list.append((int(no), name, location))

# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='root', password='123456',
                       database='db2', charset='utf8mb4')

try:
    # 2. 获取游标对象(Cursor)
    with conn.cursor() as cursor:
        # 3. 通过游标对象向数据库服务器发出批量插入的SQL语句
        affected_rows = cursor.executemany(
            'insert into `tb_dept` values (%s, %s, %s)',
            data_list
        )
        if affected_rows == len(data_list):
            print('批量新增部门成功,共插入 {} 条数据!'.format(affected_rows))
            # 4. 提交事务(transaction)
        conn.commit()

except pymysql.MySQLError as err:
    # 4. 回滚事务
    conn.rollback()
    print(type(err), err)
finally:
    # 5. 关闭连接释放资源
    conn.close()

删除操作

import pymysql

no = int(input('部门编号: '))

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

修改操作

import pymysql

no = int(input('部门编号: '))
name = input('部门名称: ')
location = input('部门所在地: ')

# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='root', password='123456',
                       database='db2', charset='utf8mb4')
try:
    # 2. 获取游标对象(Cursor)
    with conn.cursor() as cursor:
        # 3. 通过游标对象向数据库服务器发出SQL语句
        affected_rows = cursor.execute(
            'update `tb_dept` set `name`=%s, `location`=%s where `no`=%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()

查询操作

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

# 1. 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='root', password='123456',
                       database='db2', charset='utf8mb4')
try:
    # 2. 获取游标对象(Cursor)
    with conn.cursor() as cursor:
        # 3. 通过游标对象向数据库服务器发出SQL语句
        cursor.execute('select `no`, `name`, `location` 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()

分页查询

import pymysql

page = int(input('页码: '))
size = int(input('大小: '))

# 1. 创建连接(Connection)
con = pymysql.connect(host='127.0.0.1', port=3306,
                      user='root', password='123456',
                      database='db2', charset='utf8')
try:
    # 2. 获取游标对象(Cursor)
    with con.cursor(pymysql.cursors.DictCursor) as cursor:
        # 3. 通过游标对象向数据库服务器发出SQL语句
        cursor.execute(
            'select `no`, `name`, `location` from `tb_dept` order by `no` desc limit %s,%s',
            ((page - 1) * size, size)
        )
        # 4. 通过游标对象抓取数据
        for emp_dict in cursor.fetchall():
            print(emp_dict)
finally:
    # 5. 关闭连接释放资源
    con.close()

将数据库数据导入到excel中

import openpyxl
import pymysql

# 创建工作簿对象
workbook = openpyxl.Workbook()
# 获得默认的工作表
sheet = workbook.active
# 修改工作表的标题
sheet.title = '员工基本信息'
# 给工作表添加表头
sheet.append(('工号', '姓名', '地址'))
# 创建连接(Connection)
conn = pymysql.connect(host='127.0.0.1', port=3306,
                       user='root', password='123456',
                       database='db2', charset='utf8mb4')
try:
    # 获取游标对象(Cursor)
    with conn.cursor() as cursor:
        # 通过游标对象执行SQL语句
        cursor.execute(
            'select `no`, `name`, `location` '
                'from `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()

好了 至此 python操作mysql 点点关注不迷路 老铁们!!!!!

标签:err,no,python,游标,pymysql,cursor,mysql,操作,conn
From: https://blog.csdn.net/CSDN_LiMingfly/article/details/145299022

相关文章

  • 【Python】函数(一)
    函数是什么?编程中的函数和数学中的函数有一定的相似之处.数学上的函数,比如y=sinx,x取不同的值,y就会得到不同的结果.编程中的函数,是一段可以被重复使用的代码片段代码示例:求数列的和,不使用函数#1.求1-100的和sum=0foriinrange(1,101):......
  • mysql的主从复制
    一.主从复制主从复制的限制一个从服务器只能连接到一个主服务器:从服务器的复制机制是基于单个主服务器的二进制日志(binlog)来同步数据的。因此,一个从服务器不能同时从多个主服务器接收数据。主从复制的架构(读写分离)主服务器负责写操作(如INSERT、UPDATE、DELETE)从服务器负责读操作(......
  • 如何在Python中高效地读写大型文件?
    大家好,我是V哥。上一篇给大家介绍如何使用Python进行文件读写操作的方法,问题来了,如何读写的是大型文件,有没有什么方法来提高效率呢,不要捉急,这一篇来聊聊如何在Python中高效地读写大型文件。以下是在Python中高效读写大型文件的一些方法:一、逐行读取大型文件:defread_larg......
  • Python和Python 3 的区别
    Python和Python3都是非常流行的编程语言,在开发中都有各自的优点和特点。以下是其中一些值得注意的区别:代码兼容性:Python2.x和Python3.x不兼容,这是最重要的区别之一。Python2.x是早期版本,而Python3.x是重大更新后的版本,并且不完全向后兼容。这意味着在迁移过程中,需......
  • Python多继承时子类如何调用指定父类
    在Python中,多继承是一种强大的特性,允许一个类同时继承多个父类的属性和方法。然而,当多个父类中存在同名方法时,子类需要明确调用哪个父类的方法。本文将详细介绍如何在多继承情况下,子类调用指定父类的方法。一、多继承的基本概念1.1多继承的定义多继承指一个类可以继承多个父类......
  • 2025全国特种作业操作证低压电工易错题练习
    本试题来源于安考星吊灯安装在桌子上方时,与桌子的垂直距离不少于1.5m。()A.正确B.错误答案:B由于异步电动机的转子绕组并不直接与电源相接,而是依据电磁感应来产生电动势和电流,获得电磁转矩而旋转,因此又称感应电动机。()A.正确B.错误答案:A我国正弦交流电的频率......
  • 2025全国特种作业操作证高处作业易错题练习
    本题目来源:安考星制定事故应急预案的目的是在重大事故发生后能及时予以控制,有效地组织抢险和救助,防止重大事故的蔓延。()A.正确B.错误答案:A从业人员在作业过程中,应当正确佩戴和使用劳动防护用品,因未佩戴和使用劳动防护用品导致伤害的,不可以认定为工伤。()A.正确B.错......
  • 2025全国特种作业操作证低压电工易错题练习
    本题目来源:安考星磁力线是一种闭合曲线。A.正确B.错误答案:A在电压低于额定值的一定比例后能自动断电的称为欠压保护。()A.正确B.错误答案:A对从事接触职业病危害因素的特种作业人员,用人单位应当按照国家颁发的行政法规规定,组织上岗前、在岗期间和离岗时的职业......
  • 抽取网易云音乐热门评论:html+css+python+js 音乐与灵魂的碰撞
    抽取网易云音乐热门评论:html+css+python+js音乐与灵魂的碰撞代码链接不说废话,上代码!!!get.py#get.pyimporturllib.requestimporturllib.errorimporturllib.parseimportjson#抓取网易云音乐指定url的热评defget_hotComments(id):url='https://music.163.......
  • 【Mysql日志介绍】一般查询日志、慢查询日志、错误日志、二进制日志、Redo Log 、Undo
    一、日志简介 MySQLServer有以下几种日志,可以记录服务器正在发生的活动。日志类型日志信息错误日志(Errorlog)mysqld在启动、运行或停止时遇到的问题一般查询日志(Generalquerylog)已建立的客户端连接和从客户端接收到的语句慢查询日志(Slowquerylog)执行时间超......