目录

Python操作mysql数据库

目录

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.click

https://i-blog.csdnimg.cn/blog_migrate/342d96f77885e025168d5ee926ea7ab2.png “ )

2、安装pymysql库

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

3、Navicat配置连接数据库

https://i-blog.csdnimg.cn/blog_migrate/e082c335915eaa3f0a7105b7518ef5d4.png

三、Python操作MySQL

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

https://i-blog.csdnimg.cn/blog_migrate/16858de3e4c0ecf70ec21215ead3101a.png

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 语句能查出来的全部数据,元组套元组;

https://i-blog.csdnimg.cn/blog_migrate/02fb6e23e6f0f753d1623f318aa460a3.png

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

https://i-blog.csdnimg.cn/blog_migrate/ce47a32216e4de55cf6eff3ef8de0bb9.png

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

https://i-blog.csdnimg.cn/blog_migrate/f5273ddf37e03d298b312f7a98558bc7.png

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()

插入结果如下:

https://i-blog.csdnimg.cn/blog_migrate/ff0f4d124520e6f9aee90207c2fd5ca8.png

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()

https://i-blog.csdnimg.cn/blog_migrate/aedad7b27ee16d6b85b478c69bf8a858.png

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()

https://i-blog.csdnimg.cn/blog_migrate/a115518d0ce208ec28b2f896f7321e35.png

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()

https://i-blog.csdnimg.cn/blog_migrate/70cfd59afd0d3d87ddd5e061cb8f083e.png

四、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()

https://i-blog.csdnimg.cn/blog_migrate/a50a67cbdff882ff9024e4e92e210029.png