• python如何连接数据库 ?一文详解pymysql的用法 。


    使用Python连接数据库是常用的操作 ,那么在Python代码中取操作数据库呢 ? 接下来介绍一个包 :pymysql .它能帮我们在代码中连接MySQL数据库进行各种操作。

     

    1.常用数据库模块

    在做自动化测试时,我们经常会查库的需求 ,那么该如何使用python去查找数据库呢 ? 这里介绍一个python的第三方包PyMySQL . 通过它使用python语言可以连接mysql数据库 。

    以下为安装和验证 :

    #安装: pip install pymysql
    #验证: pip show pymysql 
    

    2.数据库操作流程

    首先我们可以通过查看客户端工具连接数据库的流程 :

     

    如果使用pymysql进行连接数据库的流程具体如下:

    1. 导包

    2. 创建数据库连接

    3. 获取游标对象

    4. 执行操作

    5. 关闭游标对象

    6. 关闭数据库连接

    将工具和pymysql的连接流程放在一起做个比对,将会是如下:

    3.使用pymysql操作

    3.1 建立连接

    如果想使用pymysql操作数据库 ,你就需要调用pymysql中的connect()方法建立连接 。

    # 建立连接对象 
    conn = pymysql.connect(host=None,user=None,password="",database=None,port=0,charset="")
    ​
    # 参数说明:
        host :数据库服务器地址
        user :登录用户名
        password : 密码
        database : 数据库名称
        port : 数据库连接端口,默认为3306时刻不填写。
        charset : 数据库编码,一般设置为utf8
            

    案例 :使用pymysql进行建立连接数据库 ,连接school数据库

    conn = pymysql.connect(host="localhost",user="root",password="root",database="school",charset='utf8')
    3.2常用方法

    常用的操作数据库方法:

    • cursor() : 获取游标对象

    • close() : 关闭对象

    • execute(sql) : 执行SQL语句 ,sql参数为需要传入的SQL语句。

    • fetchone() : 查询一条数据返回,从指针的下一条开始查一条数据。 。

    • fetchmany(num) : 查询num条数据返回

    • fetchall() : 获取全部的返回行

    • rowcount : 获取execute()方法执行后影响的行数

    将以上的方法和操作步骤进行对应

     

    3.3项目案例

    对数据库表数据进行查询

    1. """
    2. 连接数据库的流程 :
    3. 1. 导包 :import pymysql
    4. 2. 建立连接 : connect(host,user,password,port,database,chaset)
    5. 3. 创建游标 : cursor()
    6. 4. 执行SQL语句
    7. (1) 执行SQL :execute(sql)
    8. (2) 查询一条数据 : fetchone()
    9. (3) 查询多条数据 : fetchmany(number) , number代表的是传入多条数据
    10. (4) 查询所有数据 : fetchall()
    11. 5. 关闭游标 : close()
    12. 6. 关闭连接 : close()
    13. """
    14. # 1. 导包
    15. import pymysql
    16. # 2. 建立连接对象
    17. connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')
    18. print(connect)
    19. # 3. 创建游标
    20. cursor = connect.cursor()
    21. # 4. 执行SQL语句
    22. sql = "select * from students"
    23. res = cursor.execute(sql)
    24. print(res)
    25. # 需求1 :查询所有的数据
    26. # all_data = cursor.fetchall()
    27. # print(all_data) , 查询结果返回一个元组,每一条数据也是一个元组
    28. # 需求2 : 查询一条数据
    29. # one_data = cursor.fetchone()
    30. # print(one_data) ,返回的这条数据为元组
    31. # 需求3 : 查询5条数据
    32. five_data = cursor.fetchmany(5)
    33. print(five_data) # 查询结果返回一个元组,每一条数据也是一个元组
    34. # 5. 关闭游标
    35. cursor.close()
    36. # 6. 关闭连接对象
    37. connect.close()
    38. # 总结 :以上的三个查询方法,若只返回一条数据 ,这一条数据就在一个元组中。若返回多条数据 ,每一条数据是构成一个元组 ,然后多条数据又放在一个大的元组中。

    对数据库表数据进行增删改

    1. # 1. 导包
    2. import pymysql
    3. # 2. 建立连接对象
    4. connect = pymysql.connect(host='localhost',user='root',password='root',database='school',charset='utf8')
    5. print(connect)
    6. # 3. 创建游标
    7. cursor = connect.cursor()
    8. # 4. 执行SQL语句
    9. #需求1 :数据的修改
    10. # sql = "update students set age = 54 where name = '王伟'"
    11. # res = cursor.execute(sql)
    12. # print(res)
    13. # 需求2数据的插入
    14. # sql = "insert into students values(27,'李四',19,'男','2班',345678943,'天津')"
    15. # res = cursor.execute(sql)
    16. # print(res)
    17. # 需求3 :数据的删除
    18. sql = "delete from students where name = '李四'"
    19. res = cursor.execute(sql)
    20. print(res)
    21. # 5. 关闭游标
    22. cursor.close()
    23. # 6. 关闭连接对象
    24. connect.close()
    25. # 总结 : 使用cursor.execute()方法就可以进行增删改,只需要将SQL语句传入该方法中即可。

    4.数据库封装

    这里的数据库封装其实就是将项目的数据库连接对象封装进来,大家不需要每次进行初始化连接,而是执行调用一个方法就可以执行相应的SQL语句即可 。

    当然数据库封装应该是最灵活的一种情况 ,10个人有10个人的封装法 ,这里只给出一种最基本的封装方式 。具体如下 :

    1. # 数据库类
    2. import pymysql
    3. from setting import DB_INFO
    4. from loguru import logger
    5. class MysqlClient(object):
    6. # 初始化方法,建立连接
    7. def __init__(self):
    8. self.conn = pymysql.connect(**DB_INFO) # 初始化数据库连接
    9. # 执行SQL语句的增删改
    10. def execute(self,sql):
    11. try:
    12. with self.conn.cursor() as cursor:
    13. cursor.execute(sql)
    14. self.conn.commit()
    15. logger.info("执行的SQL语句:{}".format(sql))
    16. except Exception as e:
    17. logger.error("执行SQL错误,报错原因{},执行SQL:{}".format(e,sql))
    18. self.conn.rollback()
    19. # 执行查询
    20. def get_data(self,sql):
    21. try:
    22. with self.conn.cursor() as cursor:
    23. cursor.execute(sql)
    24. result = cursor.fetchall()
    25. logger.info("执行的SQL语句:{}".format(sql))
    26. return result
    27. except Exception as e:
    28. logger.error("执行SQL错误:{},执行SQL:{}".format(e, sql))
    29. # 关闭对象
    30. def close(self):
    31. self.conn.close()

    5.项目集成

    在项目中添加一个mysql的包名,在此包中除了编写封装数据库连接的代码,主要就是编写各模块需要执行的SQL语句。 具体如下 :

    1. 在创建项目框架时,创建mysql包名 。然后此包下创建一个连接数据库的模块 。 比如:mysql_client.py

    2. 在mysql包下可以创建项目中所需要的SQL语句模块 ,比如user_sql.py

    3. 在测试用例中调用响应的SQL语句 。

    5.1 创建连接数据和所需执行的SQL语句模块

    5.2 在测试用例中调用对应模块

     

    6.项目总结

    至此,我们已经实现了五步了 ,分别是 :

    第一 、如何编写一个接口自动化框架 ,在第一篇博文中介绍了 。

    第二、如何使用unittest编写测试用例 ,已经在第二篇博文中介绍了 。

    第三、如何使用requests实现接口请求 ,并和测试用例如何对接 ,已经在第三篇博文中介绍了。

    第四、如何使用yaml编写测试数据 ,已经在第四篇博文中介绍了 。

    第五,如何使用allure生成测试报告,已经在第五篇博文中介绍了 。

    第六 ,如何使用loguru记录日志 ,已经在第六篇博文中介绍了 。

    第七,如何使用pymysql连接数据库,也就是本篇博文了 。

  • 相关阅读:
    车牌识别流程
    Spring Boot搭建入门
    ELK企业级日志分析系统
    问题 C: 有向图是否存在环?
    数据中台导读
    HandlerMapping具有什么功能呢?
    金仓数据库 KingbaseES 插件参考手册 S(3)
    java 编程 7个简单的调优技巧
    【LeetCode每日一题】2022-10-01 1694. 重新格式化电话号码 Java实现
    【Qt】Qt中将字符串转换为数字类型的函数总结以及用法示例
  • 原文地址:https://blog.csdn.net/venustech0919/article/details/133876950