• Python如何使用PyMySQL连接数据库


    1:为什么要连接数据库呢?

            做接口自动化测试的时候,我们需要校验数据是否正常入库,数据是否正确,来做断言处理;有的时候需要修改数据,去执行其他场景的测试用例;有的时候需要删除数据,从而实现同一个数据多次使用。

            例如:注册了一个新用户,产生了多余的数据,下次同一个账号就无法注册了,这种情况怎么办呢?自动化测试都有数据准备和数据清理的操作,如果因此用例产生了多余数据,就需要清理数据,可以用Pyhthon连接Mysql直接删除多余的数据就可以了。

    2:python连接Mysql的模块安装

            第一种方法:在线安装

            在Pycharm---点击--Terminal---输入pip install PyMySQL等待完装完毕即可,如图所示

            第二种方法:离线安装

            有时候在线安装第三方模块的时,会因为网络原因总是装不上,那怎么办呢?那就手动安装

            参考这个网址:python——pymysql的安装 - 走看看

    3:开始连接MySql

            创建游标,使数据以字典的形式返回

            # 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
            cursor = db.cursor()
            # 添加cursor参数,指定返回字典数据类型
            cursor = db.cursor(cursor=pymysql.cursors.DictCursor)

    1. import pymysql
    2. # 打开数据库连接
    3. db = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456", database="user_test")
    4. """
    5. host:地址,你的数据库地址
    6. port:端口号
    7. user:用户名
    8. password:密码
    9. database:要操作的数据库
    10. """
    11. # 使用 cursor() 方法创建一个游标对象 cursor,默认返回元素数据类型
    12. cursor = db.cursor()
    13. # 添加cursor参数,指定返回字典数据类型
    14. cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
    15. # 使用 execute() 方法执行 SQL 查询
    16. cursor.execute("select * from studys")
    17. # 使用 fetchone() 方法获取单条数据.
    18. data = cursor.fetchone()
    19. # 输出data数据
    20. print(data)
    21. # 关闭数据库连接
    22. db.close()

    4:查询数据

            写查询语句,查询一行数据,查询多行数据

    1. 语法:
    2. select 列名称 from 表名称 [查询条件]
    3. # 查询表里所有内容
    4. select * from studys
    5. 例如要查询 students 表中所有学生的名字和年龄, 输入语句
    6. select name, age from studys
    7. fetchone()获取一行数据
    8. fetchall()获取所有数据

            查询一行语句

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 使用 execute()方法执行 SQL 查询
    8. # 通配符 *,意思是查询表里所有内容
    9. cursor.execute("select * from user")
    10. # 使用 fetchone() 方法获取一行数据.
    11. data = cursor.fetchone()
    12. print(data)
    13. # 关闭数据库连接
    14. db.close()

             运行结果:是以元组的形式返回的 

            查询多行语句

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 使用 execute()方法执行 SQL 查询
    8. # 通配符 *,意思是查询表里所有内容
    9. cursor.execute("select * from user")
    10. # 使用 fetchall() 方法获取查询出的所有数据.
    11. data = cursor.fetchall()
    12. print(data)
    13. # 关闭数据库连接
    14. db.close()

            运行结果:以元组的形式返回

    5:增加数据

            需要使用db.commit(),提交到数据库执行

            语法:

            insert 语句可以用来将一行或多行数据插到数据库表中, 使用的一般形式如下:

            insert [into] 表名 [(列名1, 列名2, 列名3, ...)] values (值1, 值2, 值3, ...);

            其中 [ ] 内的内容是可选的, 例如, 要给user_test数据库中的 user 表插入一条记录, 执行语句:

            insert into studys values(3, '小明');

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 使用 execute()方法执行sql语句
    8. cursor.execute("insert into user (id,name) values (3,'小明')")
    9. # 使用commit()方法,提交到数据库执行
    10. db.commit()
    11. # 可以再执行查询语句,看数据是否插入成功
    12. cursor.execute("select * from user where id ='3' and name = '小明'")
    13. # # 使用fetchone()方法获取单条数据
    14. data = cursor.fetchone()
    15. print(data)
    16. # 关闭数据库连接
    17. db.close()

            再次运行上面的代码,运行后报错,有两个错误信息

            1:错误再哪一行

            2: 下面这个错误原因是,主键冲突

            在插入数据的时候,可能会出现主键冲突,为防止插入数据时,抛出异常,所以加上try...except

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 将sql语句赋值给一个变量
    8. insert_sql = "insert into user (id,name) values (3,'小明')"
    9. try:
    10. # 使用 execute()方法执行sql语句
    11. cursor.execute(insert_sql)
    12. # 使用commit()方法,提交到数据库执行
    13. db.commit()
    14. # 可以再执行查询语句,看数据是否插入成功
    15. cursor.execute("select * from user where id ='3' and name = '小明'")
    16. # 使用fetchone()方法获取单条数据
    17. data = cursor.fetchone()
    18. print(data)
    19. except:
    20. print("数据插入失败,请查检sql语句")
    21. # 想知道报了什么错,可以抛个异常
    22. raise
    23. # 关闭数据库连接
    24. db.close()

    6:修改数据

            需要使用db.commit(),提交到数据库执行

            语法:update 表名称 set 列名称=新值 where 更新条件;

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 将sql语句赋值给一个变量
    8. update_sql = "update user set name='小小名' where id =3"
    9. try:
    10. # 使用 execute()方法执行sql语句
    11. cursor.execute(insert_sql)
    12. # 使用commit()方法,提交到数据库执行
    13. db.commit()
    14. # 可以再执行查询语句,看数据是否修改成功
    15. cursor.execute("select * from user where id ='3'")
    16. # 使用fetchone()方法获取单条数据
    17. data = cursor.fetchone()
    18. print(data)
    19. except:
    20. print("数据修改失败,请查检sql语句")
    21. # 发生错误,回滚
    22. db.rollback()
    23. # 想知道报了什么错,可以抛个异常
    24. raise
    25. # 关闭数据库连接
    26. db.close()

    7:删除数据

            需要使用db.commit(),提交到数据库执行

            语法:delete from 表名称 where 删除条件;

    1. # 导入模块
    2. import pymysql
    3. # 打开数据库连接
    4. db = pymysql.connect("127.0.0.1", "root", "123456", "user_test")
    5. # 使用 cursor() 方法创建一个游标对象 cursor
    6. cursor = db.cursor()
    7. # 将sql语句赋值给一个变量
    8. update_sql = "delete from user where id =3"
    9. try:
    10. # 使用 execute()方法执行sql语句
    11. cursor.execute(insert_sql)
    12. # 使用commit()方法,提交到数据库执行
    13. db.commit()
    14. # 可以再执行查询语句,看数据是否删除成功
    15. cursor.execute("select * from user)
    16. # 使用fetchone()方法获取单条数据
    17. data = cursor.fetchone()
    18. print(data)
    19. except:
    20. print("数据修改失败,请查检sql语句")
    21. # 发生错误,回滚
    22. db.rollback()
    23. # 想知道报了什么错,可以抛个异常
    24. raise
    25. # 关闭数据库连接
    26. db.close()
  • 相关阅读:
    接口测试及常用接口测试工具
    Centos7.8安装docker ,jdk
    智源AI日报(2022-09-01):吴恩达:中国的丰厚AI投资回报将在接下来十年显现
    Android Material Design之MaterialButtonToggleGroup(九)
    Springboot毕业设计毕设作品,校园疫情防控小程序系统 开题报告
    mysql(六)------数据库的范式和约束字段
    MongoDB
    操作系统实验五 进程间通信-管道通信
    MySQL绕过WAF实战技巧
    游戏研发解决方案:助力创意变为现实
  • 原文地址:https://blog.csdn.net/weixin_48323589/article/details/127925252