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账号的密码为hl
docker 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
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()