Python数据库操作在自动化运维中的应用

Python 数据库操作

文章目录

  • Python 数据库操作
  • 前言
  • 基础环境
  • 一、Python操作数据库简介
  • 二、PyMySQL
  • 2.1、设备清单
  • 2.2、在Python主机安装pymysql模块
  • 2.3、数据库主机安装mariadb
  • 2.4、在mariadb01上创建数据库
  • 2.5、pymysql使用
  • 2.6、数据库增删改查
  • 2.6.1、增加记录
  • 2.6.2、查询记录
  • 2.6.3、修改记录
  • 2.6.4、删除记录
  • 2.6.7、编辑查询结果
  • 前言

  • 前面的章节中学习了使用Python读写文件的方法,大家可以用文件方式来存放数据,不过使用文件的方式不容易管理,同时还容易丢失会带来许多问题。目前主流的方法都是采用数据库软件,通过数据库软件来组织和存放数据,不管是读还是存都非常方便,速度也有保障。本篇介绍Python操作MySQL数据库软件的方法。
  • 基础环境

  • 关闭防火墙
  • systemctl stop firewalld
    systemctl disable firewalld
    
  • 关闭内核安全机制
  • setenforce 0
    sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
    
  • 修改主机名
  • hostnamectl set-hostname python
    hostnamectl set-hostname mariadb01
    hostnamectl set-hostname mariadb02
    

    一、Python操作数据库简介

  • 数据库(Database)是按照数据结构组织、存储和管理建立在计算机存储设备上的数据仓库。MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发。MySQL是一个可移植的数据库,技术能在当前所有操作系统上运行,如Unix/Linux、Windows、Mac和Solaris。MySQL采用标准的SQL语句(结构化查询语言),SQL是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。
  • 虽然Python可以支持数据的本地存储,但前提是先从数据库获取才能保存下来,同时还无法存储过多的数据,因为数据释放和使用会占用较大的内存,数据库负责把磁盘数据组织好放回内存,Python负责在内容中操作数据。
  • 二、PyMySQL

  • PyMySQL是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前PyMySQL支持Python3.x,而MySQLdb不支持3.x版本。
  • 本章节我们来学习PyMySQL模块对数据库的操作。
  • 2.1、设备清单

    设备 IP地址 软件包 备注
    python主机 192.168.93.101 python3.11.6
    mariadb01 192.168.93.102 mariadb-server
    mariadb02 192.168.93.103 mariadb-server

    2.2、在Python主机安装pymysql模块

  • 通过pip安装PyMySQL的命令:
  • [root@python ~]# pip3 install pymysql
    

    2.3、数据库主机安装mariadb

  • 所有Mariadb主机都要执行
  • # 安装数据库
    yum -y install mariadb-server
    
    
    # 启动数据库
    systemctl enable mariadb.service --now
    
    
    # 设置数据库密码
    mysqladmin -u root password '123456'
    
    
    # 授权
    mysql -u root -p123456
    grant all on *.* to root@'%' identified by '123456';
    

    2.4、在mariadb01上创建数据库

    use test;
    create table users (id int(11) not null auto_increment,email varchar(255),password varchar(255),primary key (id));
    

    2.5、pymysql使用

  • 在前面的课程中,已经详细的介绍过了MySQL的安装及配置过程,在本章将不过多阐述。现在我们安装一个Mariadb数据库,并登录Mariadb实例,在test库中创建一张users表,root账户密码为"123456",代码如下。

  • 实例1:使用PyMySQL模块连接MySQL数据库向users表插入一条记录并查询这条记录:

  • [root@python ~]# cat pymysql-1.py 
    import pymysql
    
    connection = pymysql.connect(host='192.168.93.102', user='root', password='123456', db='test', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)  # 以字典的形式返回操作结果
    
    try:
        with connection.cursor() as cursor:
            sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"  # 要执行的 sql 语句
            cursor.execute(sql, ('zhangsan@qq.com', 'pwd123'))
            connection.commit()
    
            with connection.cursor() as cursor:
                sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"
                cursor.execute(sql, ('zhangsan@qq.com'))
                result = cursor.fetchall()
                print(result)
    finally:
        connection.close()
    
    [root@python ~]# python3 pymysql-1.py 
    [{'id': 5, 'password': 'pwd123'}]
    
    [root@mariadb01 ~]# mysql -uroot -p123456
    MariaDB [(none)]> use test;
    MariaDB [test]> select * from users;
    +----+-----------------+----------+
    | id | email           | password |
    +----+-----------------+----------+
    |  5 | zhangsan@qq.com | pwd123   |
    +----+-----------------+----------+
    1 row in set (0.00 sec)
    
  • 从代码的执行结果中,可以看到数据库表中已经成功插入了一条记录。
  • 代码说明,先创建一个连接对象,下面是一个异常处理。如果连接成功,执行 INSERT 语句并提交,再执行 SELECT 语句,获取查询的第一条记录并打印;finally 是最终执行关闭连接。在上面示例中用到了 pymysql.connect()函数,还有游标对象 cursor,下面具体看下它们的用法。
  • 表 7-1 是pymysql.connect()函数的常用参数。
  • 参数 描述
    host 数据库主机地址
    user 数据库账户
    password 账户密码
    db 使用的数据库
    port 数据库主机端口,默认3306
    connect_timeout 连接超时时间,默认10,单位秒
    charset 使用的字符集
    cursorclass 自定义游标使用的类。上面示例用的是字典类,以字典形式返回结果,默认是元组形式
  • 表 7-2 是 pymysql 连接对象常用方法
  • 方法 描述
    commit() 提交事务。对支持事务的数据库和表,如果提交修改操作,不适用这个方法,则不会写到数据库中
    rollback() 事务回滚。对支持事务的数据库和表,如果执行此方法,则回顾当前事务,放弃之前的操作
    cursor([cursorclass]) 创建一个游标对象。所有的 sql 语句的执行都要在游标对象下进行
  • 表 7-3 是游标对象常用方法
  • 方法 描述
    close() 关闭游标
    execute(sql) 执行 sql 语句
    excutemany(sql) 执行多条 sql 语句
    fetchone() 从执行结果中取第一条记录
    fetchmany(n) 从执行结果中取 n 条记录
    fetchall() 从执行结果中取所有记录

    2.6、数据库增删改查

  • 了解 pymysql 基本用法,现在使用上面的这些方法实现数据库的增、删、改、查功能。
  • 2.6.1、增加记录
  • 示例2:在 users 表里再添加一条记录
  • >>> import pymysql
    >>> connection = pymysql.connect(host='192.168.93.102', user='root',password='123456',db='test',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
    >>> cursor=connection.cursor()
    >>> sql="insert into users (email,password) values('lisi@qq.com','pwd123')"
    >>> cursor.execute(sql)
    1  # 代表数据库被 1 条语句受影响(也就是插入了 1 条数据)
    >>> connection.commit()
    >>> connection.close()
    
    2.6.2、查询记录
  • 示例3:查询 users 表记录
  • >>> import pymysql
    >>> connection = pymysql.connect(host='192.168.93.102', user='root',password='123456',db='test')
    >>> cursor=connection.cursor()
    >>> sql="select id,email,password from users"
    >>> cursor.execute(sql)
    2
    >>> connection.commit()
    >>> connection.close()
    
    >>> cursor.fetchone()  # 获取第一条记录
    (5, 'zhangsan@qq.com', 'pwd123')
    
    >>> cursor.fetchmany(2)  # 获取前两条记录
    ((6, 'lisi@qq.com', 'pwd123'),)
    
    2.6.3、修改记录
  • 修改用户密码
  • >>> import pymysql
    >>> connection = pymysql.connect(host='192.168.93.102', user='root',password='123456',db='test',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
    >>> cursor=connection.cursor()
    >>> sql="update users set password='456789' where email='lisi@qq.com'"
    >>> cursor.execute(sql)
    1
    >>> connection.commit()
    
    
    >>> sql="select id,email,password from users"
    >>> cursor.execute(sql)   # 执行 sql 语句
    2
    >>> cursor.fetchmany(2)   # 显示前两条记录
    [{'id': 5, 'email': 'zhangsan@qq.com', 'password': 'pwd123'}, {'id': 6, 'email': 'lisi@qq.com', 'password': '456789'}]
    
    2.6.4、删除记录
  • 删除用户信息
  • >>> sql="delete from users where email='lisi@qq.com'"
    >>> cursor.execute(sql)
    1
    
    
    >>> connection.commit()
    >>> sql="select id,email,password from users where email=%s"
    >>> cursor.execute(sql,('zhangsan@qq.com'))
    1
    >>> cursor.execute(sql,('lisi@qq.com'))
    0
    
    
    >>> sql="select id,email,password from users"
    >>> cursor.execute(sql)
    1
    >>> cursor.fetchall()
    [{'id': 5, 'email': 'zhangsan@qq.com', 'password': 'pwd123'}]
    
    2.6.7、编辑查询结果
  • 示例6:查询 users 表所有email与密码
  • [root@python ~]# cat pymysql-2.py
    import pymysql
    
    connection = pymysql.connect(host='192.168.93.102', user='root', password='123456', db='test', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor)  # 以字典的形式返回操作结果
    
    try:
        with  connection.cursor() as cursor:
            sql = "select id,email,password from users"
            cursor.execute(sql)
            result = cursor.fetchall()
            for dict in result:
                print("email: %s, password= %s" % (dict['email'],dict['password']))
    finally:
        connection.close()
    
    [root@python ~]# python3 pymysql-2.py 
    email: zhangsan@qq.com, password= pwd123
    email: lisi@qq.com, password= pwd123
    email: wangwu@qq.com, password= pwd123
    email: zhaoliu@qq.com, password= pwd123
    

    作者:云教员

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python数据库操作在自动化运维中的应用

    发表回复