pymysql详解——通过python连接Mysql数据库
pymysql是可用于连接mysql数据库,且能够提供mysql与Python窗口交互创立通道的工具库。可以通过创建引擎,建立游标直接通过python编程实现mysql数据库操作。在开发和分析可形成线性脚本。是广泛使用的库。
连接数据库的重要性
做接口自动化测试的时候,我们需要校验数据是否正常入库,数据是否正确,来做断言处理;有的时候需要修改数据,去执行其他场景的测试用例;有的时候需要删除数据,从而实现同一个数据多次使用。
例如:注册了一个新用户,产生了多余的数据,下次同一个账号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如果因此用例产生了多余数据,就需要清理数据,可以用Pyhthon连接Mysql直接删除多余的数据就可以了。
python连接Mysql的模块安装
在Pycharm—点击–Terminal—输入pip install PyMySQL等待完装完毕即可,如图所示
也可以用清华源或者阿里源等镜像仓库地址,速度更快。
pip install PyMySQL -i https://pypi.tuna.tsinghua.edu.***/simple
安装库其它推荐源:
清华:https://pypi.tuna.tsinghua.edu.***/simple
阿里云:https://mirrors.aliyun.***/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.***/simple/
华中理工大学:https://pypi.hustunique.***/
山东理工大学:https://pypi.sdutlinux.org/
豆瓣:https://pypi.douban.***/simple/
也可以通过pycharm设置里面找到python解释器查看相关库并安装:
增删改需要有提交事务的操作,查不需要提交事务,但如果循环查询,务必提交事务,否则结果都是重复的
创建连接对象——db= pymysql()
创建cursor游标对象——cur = db.cursor()
数据操作——cur.execute(sql)
提交连接事务——db.***mit()
关闭cursor游标对象——cur.close()
关闭连接对象——db.close( )
什么是游标
游标,通俗来说就是“游动的标志”,
有时候,我们执行一条查询语句的时候,往往会得到N条返回结果,执行sql语句去除这些返回结果的接口,就是游标。沿着这个游标,我们可以一次取出一行记录。
举个例子:
当不使用游标功能,去执行 select * from employee where salary > 3000 ; 这条语句时,如果有1000条返回结果,系统会一次性将1000条记录返回到界面中,你不能做选择,也不能做其他操作。
当我们开启了游标功能,再去执行这条语句的时候,系统会先帮你找到这些行,先给你存放起来,然后提供一个游戏接口。当你需要数据的时候,就借助这个游标去一行行的取出数据,你每取出一条记录,游标指针就朝前移动一次,一直到取完最后一行数据。
当我们使用python连接MySQL的时候,那么python就相当于是MySQL服务器的一个客户端,我们利用python这个client去操作MySQL的server
在pymysql中操作数据库,就是使用游标这种方式来获取表中的数据。
开始连接MySql
创建游标,使数据以字典的形式返回
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 添加cursor参数,指定返回字典数据类型
cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
查询数据
写查询语句,查询一行数据,查询多行数据
语法:
select 列名称 from 表名称 [查询条件]
# 查询表里所有内容
select * from studys
例如要查询 students 表中所有学生的名字和年龄, 输入语句
select name, age from studys
fetchone()获取一行数据
fetchall()获取所有数据
增加数据
需要使用db.***mit(),提交到数据库执行
语法:
insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:
insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);
其中 [ ] 内的内容是可选的, 例如, 要给user_test数据库中的 user 表插入一条记录, 执行语句:
insert into studys values(3, '小明');
删除数据
需要使用db.***mit(),提交到数据库执行
语法:delete from 表名称 where 删除条件;
在插入数据的时候,可能会出现主键冲突,为防止插入数据时,抛出异常,所以加上try…except
我们先来做个简单的案列:
先用Navicat连接我们数据库:
然后先建一个简单的表
teacher表的创建:
create table teacher(
id int(4) not null unique auto_increment,
num int(10) not null unique,
name varchar(20) not null,
sex varchar(4) not null,
birthday datetime,
address varchar(50),
primary key(id)
)engine = InnoDB default charset = utf8 collate = utf8_bin;
就可以成功看到我们的建的teacher表了:
我们利用pymysql库连接mysql使用 execute()方法执行插入数据sql语句并查询teacher表:
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", port=3306, user="你的用户名", password="xxxx", database="z***")
"""
host:地址,你的数据库地址
port:端口号
user:用户名
password:密码
database:要操作的数据库
"""
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 添加cursor参数,指定返回字典数据类型
# 使用 execute()方法执行sql语句
cursor.execute("insert into teacher values(1,1001, '张三', '男', '1984-11-08', '北京市昌平区'),"
"(2, 1002, '李四', '女', '1970-01-21', '北京市海淀区'),"
"(3, 1003, '王五', '男', '1976-10-30', '北京市昌平区'),"
"(4, 1004, '赵六', '男', '1980-06-05', '北京市顺义区')")
# 使用***mit()方法,提交到数据库执行
db.***mit()
# 可以再执行查询语句,看数据是否插入成功
cursor.execute("select * from teacher")
# # 使用fetchone()方法获取单条数据
data = cursor.fetchall()
print(data)
# 关闭数据库连接
输出的data结果就是sql语句查询到的结果
data = cursor.fetchall()
print(data)
我们再去navicat里面看看
这里显示成功插入数据
我们再试试删除一条teacher表记录 :delete from teacher where id =1 然后我们再查询删除后teacher表的内容
import pymysql
# 打开数据库连接
db = pymysql.connect(host="localhost", port=3306, user="你的用户名", password="xxxx", database="z***")
"""
host:地址,你的数据库地址
port:端口号
user:用户名
password:密码
database:要操作的数据库
"""
# 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
cursor = db.cursor()
# 将sql语句赋值给一个变量
update_sql = "delete from teacher where id =1"
try:
# 使用 execute()方法执行sql语句
cursor.execute(update_sql)
# 使用***mit()方法,提交到数据库执行
db.***mit()
# 可以再执行查询语句,看数据是否删除成功
cursor.execute("select * from teacher")
# 使用fetchone()方法获取单条数据
data = cursor.fetchall()
print(data)
except:
print("数据修改失败,请查检sql语句")
# 发生错误,回滚
db.rollback()
# 想知道报了什么错,可以抛个异常
raise
# 关闭数据库连接
db.close()
注意这里:
#fetchone()获取一行数据
#fetchall()获取所有数据
navicat也成功显示删除记录成功:
这就是关于pymsql连接数据库简单的小案例希望看过我的博客对你所有帮助!
今日写博客听歌—— Can We Kiss Forever歌手:Kina / Adriana Proenza