在工作中,我们需要经常对数据库进行操作,比如 Oracle、MySQL、SQL Sever 等,今天我们就学习如何利用Python来操作 MySQL 数据库。

1.安装第三方库

使用Python来操作MySQL,需要用到 PyMySQL 这个第三方库,具体安装如下:

pip install PyMySQL

我这里安装的版本是 0.9.3。

2.基本操作-增删改查

Python操作MySQL的步骤如下:

  • 建立数据库连接
  • 通过 cursor() 创建游标对象(pymysql通过游标来执行sql和获取结果)
  • 使用 execute() 执行sql
  • 获取结果(查询)/提交事务(增删改)
  • 关闭游标
  • 关闭连接

注意:用Python进行增删改查操作之前,最好先检查下sql语句是否正确,确保没有错误之后,再放到Python代码中。

查询操作

import pymysqldef select_db(select_sql):"""查询"""# 建立数据库连接db = pymysql.connect(host="192.168.89.128",port=3306,user="root",passwd="123456",db="test2020")# 通过 cursor() 创建游标对象,并让查询结果以字典格式输出cur = db.cursor(cursor=pymysql.cursors.DictCursor)# 使用 execute() 执行sqlcur.execute(select_sql)# 使用 fetchall() 获取所有查询结果data = cur.fetchall()# 关闭游标cur.close()# 关闭数据库连接db.close()return dataselect_sql = 'SELECT * FROM user WHERE username="张三"'
print(select_db(select_sql))

在上面,创建游标时使用了 cursor=pymysql.cursors.DictCursor ,目的是为了让查询结果以 列表嵌套字典 的格式输出,以方便后续操作。如果不使用该参数,那么返回的查询结果将是 元组嵌套元组 的形式。

更新操作

import pymysqldef update_db(update_sql):"""更新"""# 建立数据库连接db = pymysql.connect(host="192.168.89.128",port=3306,user="root",passwd="123456",db="test2020")# 通过 cursor() 创建游标对象cur = db.cursor()try:# 使用 execute() 执行sqlcur.execute(update_sql)# 提交事务db.commit()except Exception as e:print("操作出现错误:{}".format(e))# 回滚所有更改db.rollback()finally:# 关闭游标cur.close()# 关闭数据库连接db.close()update_sql = 'UPDATE user SET username = "张三2" WHERE id = 1'
update_db(update_sql)

在执行更新操作sql时,需要使用事务处理,即使用创建的连接进行提交事务 db.commit() ,使当前更改生效。当执行sql语句出现错误时,还应该支持事务回滚操作 db.rollback() 。

新增操作

import pymysqldef insert_db(insert_sql):"""插入"""# 建立数据库连接db = pymysql.connect(host="192.168.89.128",port=3306,user="root",passwd="123456",db="test2020")# 通过 cursor() 创建游标对象cur = db.cursor()try:# 使用 execute() 执行sqlcur.execute(insert_sql)# 提交事务db.commit()except Exception as e:print("操作出现错误:{}".format(e))# 回滚所有更改db.rollback()finally:# 关闭游标cur.close()# 关闭数据库连接db.close()insert_sql = 'INSERT INTO user(id, username, password) VALUES(11, "王五", "333333")'
insert_db(insert_sql)

在执行新增操作sql时,需要像 更新操作 一样,使用事务来处理。

删除操作

import pymysqldef delete_db(delete_sql):"""删除"""# 建立数据库连接db = pymysql.connect(host="192.168.89.128",port=3306,user="root",passwd="123456",db="test2020")# 通过 cursor() 创建游标对象cur = db.cursor()try:# 使用 execute() 执行sqlcur.execute(delete_sql)# 提交事务db.commit()except Exception as e:print("操作出现错误:{}".format(e))# 回滚所有更改db.rollback()finally:# 关闭游标cur.close()# 关闭数据库连接db.close()delete_sql = 'DELETE FROM user WHERE id = 11'
delete_db(delete_sql)

在执行删除操作sql时,需要像 更新操作、插入操作 一样,使用事务来处理。

3.简单封装数据库操作

从上面的代码中,我们可以发现存在不少问题,比如增删改操作的代码除了执行的sql不同外,其他代码都是一样的;同时每个操作时都写了一次建立数据库连接的代码,也就是说每次操作都会建立和删除连接的操作。

针对上面的问题,我们完全可以对上面的增删改查操作进行简单的封装,把Python操作MySQL的代码封装到一个类中,只在创建对象实例的时候建立数据库连接,只在对象删除时关闭连接。

以下是对数据库操作的简单封装:

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流群:711312441
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
import pymysqlclass MysqlDb():def __init__(self, host, port, user, passwd, db):# 建立数据库连接self.conn = pymysql.connect(host=host,port=port,user=user,passwd=passwd,db=db)# 通过 cursor() 创建游标对象,并让查询结果以字典格式输出self.cur = self.conn.cursor(cursor=pymysql.cursors.DictCursor)def __del__(self): # 对象资源被释放时触发,在对象即将被删除时的最后操作# 关闭游标self.cur.close()# 关闭数据库连接self.conn.close()def select_db(self, sql):"""查询"""# 使用 execute() 执行sqlself.cur.execute(sql)# 使用 fetchall() 获取查询结果data = self.cur.fetchall()return datadef execute_db(self, sql):"""更新/插入/删除"""try:# 使用 execute() 执行sqlself.cur.execute(sql)# 提交事务self.conn.commit()except Exception as e:print("操作出现错误:{}".format(e))# 回滚所有更改self.conn.rollback()if __name__ == '__main__':db = MysqlDb("192.168.89.128", 3306, "root", "123456", "test2020")select_sql = 'SELECT * FROM user WHERE username="张三2"'update_sql = 'UPDATE user SET username = "张三2" WHERE id = 1'insert_sql = 'INSERT INTO user(id, username, password) VALUES(11, "王五", "333333")'delete_sql = 'DELETE FROM user WHERE id = 11'data = db.select_db(select_sql)print(data)db.execute_db(update_sql)db.execute_db(insert_sql)db.execute_db(delete_sql)

用Python操作MySQL数据库-详细指南相关推荐

  1. python操作mysql数据库(增、删、改、查)_python对 MySQL 数据库进行增删改查的脚本...

    # -*- coding: utf-8 -*- import pymysql import xlrd # import codecs #连接数据库 conn = pymysql.connect(hos ...

  2. python操作mysql中的表_带你了解什么是Python操作MySQL数据库

    写这篇文章主要是为了介绍Python操作MySQL数据库,并结合相应的实例带你更加深入了解.文中的代码实例很详细,对大家有一定的参考学习价值. 1.什么是pymysql? PyMySQL是在Pytho ...

  3. python操作mysql数据库的常用方法使用详解

    python操作mysql数据库 1.环境准备: Linux 安装mysql: apt-get install mysql-server 安装python-mysql模块:apt-get instal ...

  4. Python操作mySql数据库封装类

    这是自己在做项目过程中,整理封装的操作mysql数据库封装类,自己可以修改下使用,节省大量时间. myGlobal.py # -*- coding: utf-8 -*-global globalLis ...

  5. python 天气预报 mysql_python + docker, 实现天气数据 从FTP获取以及持久化(二)-- python操作MySQL数据库...

    前言 在这一节中,我们主要介绍如何使用python操作MySQL数据库. 准备 MySQL数据库使用的是上一节中的docker容器 "test-mysql". Python 操作 ...

  6. python操作mysql数据库练习

    python操作mysql数据库练习 本次练习是在windows下,mysql版本为5.7,python版本为2.7.5,集成环境为pycharm. 创建表时,enign在innodb下支持事务,其他 ...

  7. imooc的疯狂的蚂蚁的课程《Python操作MySQL数据库》 python3+pymysql模块来操作mysql数据库

    以下代码为imooc的疯狂的蚂蚁的课程<Python操作MySQL数据库>的python3版本的代码,使用的是pymysql模块来操作mysql数据库,代码与原课程有所改动,注意运行时需要 ...

  8. python操作mysql数据库用到的fetchone()函数和fetchall()函数

    在用python操作mysql数据库时,碰到了下面这两个函数,标记一下: fetchone() : 返回单个的元组,也就是一条记录(row),如果没有结果 则返回 None fetchall() : ...

  9. python操作mysql数据库实现增删改查

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...

最新文章

  1. 通俗易懂地解释遗传算法?有什么例子?
  2. shell shock 执行漏洞分析
  3. Android短信发送流程之长短信发送(原)
  4. C++——异步操作(std::future、std::async、std::packaged_task、std::promise)
  5. java url 授权_Java:如何使用UrlConnection发布请求与授权?
  6. 贝壳金控赵文乐:基于 Spring Cloud 的服务治理实践
  7. Java设计模式学习总结(4)——创建型模式之单例模式
  8. php7异常抛出的好处,PHP7的错误与异常
  9. viper4android还用酷狗,viper4windows_viper4android_viper4蝰蛇音效
  10. 奥的斯服务器故障显示m什么意思,奥迪斯电梯故障代码对照表 奥的斯电梯故障解决方法...
  11. 小程序搜索框搜索、查询(模糊搜索、关键字查询)
  12. http://www.bluecoat.com.cn/resources/overview
  13. python对写作有什么帮助_[俄勒冈大学]养成Python写作习惯
  14. Kafka 客户端 org.apache.kafka:kafka-clients:2.4.1
  15. 基于JAVA医院预约挂号系统设计与实现 开题报告
  16. 李宏毅老师《机器学习》课程笔记-3卷积神经网络
  17. Arduino入门教程
  18. 《致我们终将逝去的青春》经典语录
  19. 676_AUTOSAR_TR_Methodology_文档阅读3
  20. 详解酒店IPTV系统 -- -南京邮电大学 江凌云

热门文章

  1. Matlab生成stm32代码
  2. idea 中运行 Scanner.nextLine() 一直卡住
  3. 谷歌地图导入谷歌地球:制作轨迹与游览
  4. NS3 seventh.cc为例说明Probe 一
  5. Nginx防止恶意域名解析
  6. 李沐动手学深度学习(pytorch版本)d2lzh_pytorch包的缺少安装问题
  7. 亚马逊面部识别系统大乌龙:将28名议员认成嫌犯
  8. 线性代数及其应用第五版
  9. 戴尔外星人Alienware Aurora R8原厂预装系统,带一键还原,F12 Support Assist OS Recovery恢复功能一键恢复出厂设置
  10. css 实现sticky 吸顶吸底效果