Python操作mysql数据库

一、数据库分类

关系型数据库:采用了关系模型来组织数据的数据库,如MySQL、PostgreSQL、Oracle数据库。

非关系型数据库:以键值对存储,且结构不固定,可以减少一些时间和空间的开销,如MongoDB、Redis。

二、Python操作MySQL环境安装

1、Docker部署MySQL:

1)创建数据库目录(略)

mkdir -p /opt/mysql/data

2)创建并运行MySQL容器

# -d 守护进程后台运行# -v 目录映射——挂载;作用是为了持久化# -e 环境变量# root用户密码设置为hl# -p 映射端口 端口默认3306# root账号的密码为hldocker run -d --name mysql -v /opt/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=hl -p 3306:3306 registry.cn-hangzhou.aliyuncs.com/sqqdcl/waimai-db

如果你想学习接口自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的接口自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386    

https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.clickicon-default.png?t=N5K3https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

2、安装pymysql库

#python访问MySQL,需要安装pymysql库pip install pymysql

3、Navicat配置连接数据库

三、Python操作MySQL

Python操作数据库的过程:创建连接->获取游标->执行命令->关闭游标->关闭连接

1、创建连接,连接数据库的参数按照实际情况添加

​​

import pymysql

#定义一个函数,用来创建连接数据库
def mysql_db():
    con = pymysql.connect(
        host='192.168.223.130',
        port=3306,
        database='mysql',
        charset='utf8',
        user='root',
        password='hl'
    )

if __name__ == '__main__':
    mysql_db()

2、获取游标,执行Sql,查询操作


import pymysql

#定义一个函数,用来操作数据库
def mysql_db():
    con = pymysql.connect(
        host='192.168.223.130',
        port=3306,
        database='mysql',
        charset='utf8',
        user='root',
        password='hl'
    )
    try:
        with con.cursor() as cursor:
            #一、查询
            sql = "select * from tables_priv;"
            #执行SQL语句
            #执行后的结果都保存在cursor中
            cursor.execute(sql)

            #1-从cursor中获取全部数据用fetchall
            # datas = cursor.fetchall()
            # print("获取的数据:\n",datas)

            #2-从cursor中获取一条数据用fetchall
            # data = cursor.fetchone()
            # print("获取的数据:\n",data)

            #3-想要从cursor中获取几条数据用fetchmany
            datas = cursor.fetchmany(3)
            print("获取的数据:\n",datas)
    except Exception as e:
        print("数据库异常:\n",e)
    finally:
        #不管成功还是失败,都要关闭数据库连接
        con.close()

if __name__ == '__main__':
    mysql_db()

2.1、fetchall:获取当前SQL语句能查出来的全部数据,元组套元组;

2.2、fetchone:每次获取一条数据。但是获取到这条数据后,指针会往后移一行数据,返回一个元组;

2.3、fetchmany:直接告诉它想要多少条数据。

3、插入数据操作

3.1、插入一条数据

说明:除了查询,其他操作都需要commit;commit对应rollback,回滚到上次提交的地方。​​​​​​​

import pymysql

#定义一个函数,用来操作数据库
def mysql_db():
    con = pymysql.connect(
        host='192.168.223.130',
        port=3306,
        database='mysql',
        charset='utf8',
        user='root',
        password='hl'
    )
    try:
        with con.cursor() as cursor:
            # 二、插入
            #1-插入一条数据
            sql = "insert into help_category(help_category_id, name, parent_category_id, url)value(900,'hl-test01',0,'');"
            #执行SQL语句
            cursor.execute(sql)
            #执行玩SQL语句要提交
            con.commit()
            print("提交成功")

    except Exception as e:
        # 如果执行失败要回滚
        con.rollback()
        print("数据库异常:\n",e)
    finally:
        #不管成功还是失败,都要关闭数据库连接
        con.close()

if __name__ == '__main__':
    mysql_db()

插入结果如下:

3.2、插入多条数据​​​​​​​

 try:
        with con.cursor() as cursor:
            # 二、插入
            #1-插入一条数据
            # sql = "insert into help_category(help_category_id, name, parent_category_id, url)values(900,'hl-test01',0,'');"

            # 2-插入多条数据
            value = "(901,'hl-test02',0,''),(902,'hl-test03',0,''),(903,'hl-test04',0,'')"
            # sql = f"insert into help_category(help_category_id, name, parent_category_id, url) values {value};"
            sql = f"insert into help_category values {value};"
            #执行SQL语句
            cursor.execute(sql)
            #执行玩SQL语句要提交
            con.commit()
            print("提交成功")

    except Exception as e:
        # 如果执行失败要回滚
        con.rollback()
        print("数据库异常:\n",e)
    finally:
        #不管成功还是失败,都要关闭数据库连接
        con.close()

4、更新数据


    try:
        with con.cursor() as cursor:
            #三、更新
            sql = f"update help_category set name='HL-Update' where help_category_id=900;"
           #执行SQL语句
            cursor.execute(sql)
            #执行完SQL语句要提交
            con.commit()
            print("提交成功")

    except Exception as e:
        # 如果执行失败要回滚
        con.rollback()
        print("数据库异常:\n",e)
    finally:
        #不管成功还是失败,都要关闭数据库连接
        con.close()

5、删除数据


import pymysql

#定义一个函数,用来操作数据库
def mysql_db():
    con = pymysql.connect(
        host='192.168.223.130',
        port=3306,
        database='mysql',
        charset='utf8',
        user='root',
        password='hl'
    )
    try:
        with con.cursor() as cursor:
            #一、查询
            # sql = "select * from tables_priv;"
            #执行SQL语句
            #执行后的结果都保存在cursor中
            # cursor.execute(sql)

            #1-从cursor中获取全部数据用fetchall
            # datas = cursor.fetchall()
            # print("获取的数据:\n",datas)

            #2-从cursor中获取一条数据用fetchall
            # data = cursor.fetchone()
            # print("获取的数据:\n",data)

            #3-想要从cursor中获取几条数据用fetchmany
            # datas = cursor.fetchmany(1)
            # print("获取的数据:\n",datas)

            # 二、插入
            #1-插入一条数据
            # sql = "insert into help_category(help_category_id, name, parent_category_id, url)values(900,'hl-test01',0,'');"

            # 2-插入多条数据
            # value = "(901,'hl-test02',0,''),(902,'hl-test03',0,''),(903,'hl-test04',0,'')"
            # sql = f"insert into help_category values {value};"

            #三、更新
            # sql = f"update help_category set name='HL-Update' where help_category_id=900;"

            #四、删除
            sql = "delete from help_category where help_category_id like '90%';"
            #执行SQL语句
            cursor.execute(sql)
            #执行完SQL语句要提交
            con.commit()
            print("提交成功")
    except Exception as e:
        # 如果执行失败要回滚
        con.rollback()
        print("数据库异常:\n",e)
    finally:
        #不管成功还是失败,都要关闭数据库连接
        con.close()

if __name__ == '__main__':
    mysql_db()

四、Python封装mysql数据库

1、将连接数据的参数写入mysqlConfig.py

class MysqlConfig:
    HOST = '192.168.223.130'
    PORT = 3306
    USER = 'root'
    PASSWORD = 'hl'
    DB = 'mysql'
    CHARSET = 'utf8'

2、封装数据库的增删改查操作


import pymysql
from mysqlConfig import MysqlConfig

class MysqlConnection:
    def __init__(self,host=MysqlConfig.HOST,
                port=MysqlConfig.PORT,
                user=MysqlConfig.USER,
                pwd=MysqlConfig.PASSWORD,
                db=MysqlConfig.DB):
        self.db = pymysql.connect(host=host,
                                  port=port,
                                  user=user,
                                  password=pwd,
                                  database=db,
                                  charset=MysqlConfig.CHARSET)#创建连接
        self.cursor = self.db.cursor()#创建游标

    #查询方法
    def query(self,sql,many=True):
        try:
            self.cursor.execute(sql)#执行SQL语句
            if many:
                res = self.cursor.fetchall()
            else:
                res = self.cursor.fetchone()
            return res
        except Exception as e:
            raise e#打印日志
    #增删改方法
    def __do(self,sql):
        try:
            self.cursor.execute(sql)#执行SQL语句
        except Exception as e:
            self.db.rollback()#如果执行失败要回滚
            #打日志
            raise e
        else:
            self.db.commit()#提交

    def update(self,sql):
        self.__do(sql)

    def insert(self,sql):
        self.__do(sql)

    def delete(self,sql):
        self.__do(sql)

    def exit(self):
        self.cursor.close()#关闭游标
        self.db.close()#关闭数据库

if __name__ == '__main__':
    db = MysqlConnection()
    res = db.query('select * from tables_priv;')
    print(res)
    db.exit()