python数据库操作指南之PyMysql使用详解

 更新时间:2023年03月02日 10:39:03   作者:南京丛林Jungle  
PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2 中则使用mysqldb,下面这篇文章主要给大家介绍了关于python数据库操作指南之PyMysql使用的相关资料,需要的朋友可以参考下

PyMysql使用详解

在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。

安装

pip3 install PyMysql
# 可使用 pip list 查看此环境安装了哪些第三方库    pip list | grep PyMysql

使用

import pymysql

连接数据库

使用connect函数创建连接对象,此连接对象提供关闭数据库、事务回滚等操作

一般传参为:host, user, password, port(默认为3306), database(想要连接的数据库名)

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')

连接对象的常见方法

方法名说明
cursor()获取游标对象,操作数据库,如执行DML操作,调用存储过程等
commit()提交事务
rollback()回滚事务
close()关闭数据库连接

操作数据库

操作数据库主要使用cursor游标对象,对数据库进行操作

cursor游标对象的常见方法

方法名说明
close()关闭当前游标对象
execute(query)执行数据库操作,如sql语句或数据库命令
executemany(query,params)用于批量操作,如:批量更新
fetchone()获取查询结果集中的下一条记录
fetchmany(size)获取查询结果集中指定数量的记录,size默认为1
fetchall()获取查询结果集中所有记录
nextset()跳至下一个可用的结果集

fetchone(),fetchmany(size),fetchall() 三者的返回值都是元组 或 元组的嵌套 查

查询主要获取结果集,注意fetchone 得到的是元组, fetchmany(size),fetchall()得到的是元组的嵌套

注意:

如果既要使用python的字符串解析%,sql语句中又包含sql的模糊查询占位符%, 模糊查询使用%%即可,这样不会报错

import pymysql

# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 创建游标对象
cursor = db.cursor()

table_name = 'map_point'
sql = "SELECT * FROM %s WHERE username LIKE 'DL%%' " % table_name
try:
    cursor.execute(sql)  # 执行sql语句,也可执行数据库命令,如:show tables
    result = cursor.fetchall()  # 所有结果
    print(result)
except Exception as e:
    db.rollback()
    print("查询失败")
    print(e)
finally:
    cursor.close()  # 关闭当前游标
    db.close()  # 关闭数据库连接

循环查询:

在一些场景中,需要进行循环查询,判断,此时在执行完execute查询语句后,务必进行commit提交,否则每次查询到的数据都是之前查询结果的快照,也就是旧数据。

或者采用第二种方案,创建connect连接时,增添autocommit=True属性,自动进行commit提交。

增,删,改

增删改需要有提交事务的操作,查不需要提交事务,但如果循环查询,务必提交事务,否则结果都是重复的

创建连接对象——db= pymysql()

创建cursor游标对象——cur = db.cursor()

数据操作——cur.execute(sql)

提交连接事务——db.commit()

关闭cursor游标对象——cur.close()

关闭连接对象——db.close( )

import pymysql

# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 创建游标对象
cursor = db.cursor()

table_name = 'table_name '
user_id = 'yyy'
user_no = 'xxx'
sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, user_no, user_id)
try:
    cursor.execute(sql)  # 执行sql语句,也可执行数据库命令,如:show tables
    db.commit()  # 增删改,必须执行事务
    print("数据更新成功")
except Exception as e:
    db.rollback()  # 若出现失败,进行回滚
    print("数据更新失败")
    print(e)
finally:
    cursor.close()  # 关闭当前游标
    db.close()  # 关闭数据库连接

使用循环批量更新

db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')

table_name = 'table_name'
update_list = ['xxx2', 'xxxx3']
condition_list = ['xxx', 'xxx1']
# 条件集合,更新集合长度相等时可使用,可根据其他情况重新编写
cursor = db.cursor()
for i in range(len(condition_list)):
    sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, update_list[i], 
                                                                                condition_list[i])
    print('执行sql语句:' + sql)
    try:
        cursor.execute(sql)
        db.commit()
        print("数据更新成功" + str(i+1) + '条')
    except Exception as e:
        db.rollback()
        print("数据更新失败")
        print(e)
cursor.close()
db.close()

使用executemany(query, param) 批量更新

params为每条记录的维度,可为嵌套数组和元组

注意:sql语句中需要更改的数据不管什么类型,统一使用%s作为占位符,不需要加引号

# 创建数据库连接对象
db = pymysql.connect(host='127.0.0.1',
                     user='root',
                     password='pwd',
                     database='database_name')
# 创建游标对象
cursor = db.cursor()
update_list = ['a', 'b']
condition_list = ['a1', 'b1']
# 条件数组和需要更新的数据数组是分开的,因为param需要以每条的维度,所以可以使用拉链函数合并
params = zip(update_list, condition_list) # 或 param = [['a', 'a1'], ['b', 'b1']]
sql = "UPDATE map_point SET storageLocation_no = %s WHERE position_id = %s"  # 注意 这里的 占位%s 都不用加引号
try:
    cursor.executemany(sql, params)  # 执行sql语句
    db.commit()  # 执行事务
    print("数据批量更新成功")
except Exception as e:
    db.rollback()
    print("数据更新失败")
    print(e)
finally:
    cursor.close()  # 关闭当前游标
    db.close()  # 关闭数据库连接

总结

到此这篇关于python数据库操作指南之PyMysql使用详解的文章就介绍到这了,更多相关python数据库操作PyMysql使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用PyQt5制作一个豆瓣电影信息查看器

    利用PyQt5制作一个豆瓣电影信息查看器

    这篇文章主要介绍了如何通过PyQt5制作一个查看器,可以查看豆瓣前100名电影的信息,当然这个爬取信息比较简单。感兴趣的小伙伴可以试一试
    2022-01-01
  • python dict如何定义

    python dict如何定义

    在本篇文章里小编给大家整理的是关于python dict如何定义的相关知识点内容,需要的朋友们可以参考下。
    2020-09-09
  • 详解Python中openpyxl模块基本用法

    详解Python中openpyxl模块基本用法

    这篇文章主要介绍了Python中openpyxl模块基本用法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python 读取WAV音频文件 画频谱的实例

    Python 读取WAV音频文件 画频谱的实例

    这篇文章主要介绍了Python 读取WAV音频文件 画频谱的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • 零基础小白多久能学会python

    零基础小白多久能学会python

    在本篇文章里小编给大家分享的是一篇关于零基础学python要多久的相关文章内容,有兴趣的朋友们可以跟着学习下。
    2020-06-06
  • Python使用Opencv打开笔记本电脑摄像头报错解问题及解决

    Python使用Opencv打开笔记本电脑摄像头报错解问题及解决

    这篇文章主要介绍了Python使用Opencv打开笔记本电脑摄像头报错解问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • python算法与数据结构之单链表的实现代码

    python算法与数据结构之单链表的实现代码

    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。这篇文章主要介绍了python算法与数据结构之单链表的实现代码,需要的朋友可以参考下
    2019-06-06
  • python实现有效的括号判断实例代码

    python实现有效的括号判断实例代码

    这篇文章主要给大家介绍了关于python实现有效的括号判断的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-01-01
  • Springboo如何t动态修改配置文件属性

    Springboo如何t动态修改配置文件属性

    这篇文章主要介绍了Springboo如何t动态修改配置文件属性问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 关于Python3 类方法、静态方法新解

    关于Python3 类方法、静态方法新解

    今天小编就为大家分享一篇关于Python3 类方法、静态方法新解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08

最新评论