前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Py测开《操作mysql的上下文管理器代码详解、多态和私有属性含义的总结》

Py测开《操作mysql的上下文管理器代码详解、多态和私有属性含义的总结》

作者头像
清菡
发布2022-04-27 19:26:13
3120
发布2022-04-27 19:26:13
举报
文章被收录于专栏:清菡软件测试清菡软件测试

目录

  • 一、实现一个操作mysql的上下文管理器(可以自动断开连接)
    • 1.代码
    • 2.操作mysql的上下文管理器代码详解
    • 3.cur.fetchone()cur.fetchall()的区别
  • 二、描述__slots__属性的作用,并修改读取excel类中保存用例的类
  • 三、面向对象的三大特征是什么?多态又是什么?
  • 四、私有属性怎么定义,不同的定义方式有什么区别?

一、实现一个操作mysql的上下文管理器(可以自动断开连接)

1.代码

代码语言:javascript
复制
import  pymysql
class DB:
    # 数据库操作的上下文管理器。

    def __init__(self,data_conf):
        self.con=pymysql.connect(**data_conf)
        self.cursor=self.con.cursor()

    def __enter__(self):
        return self.cursor

    def __exit__(self, exc_type, exc_val, exc_tb):
        self.cursor.close()
        self.con.close()

DATABASES_CONF=dict(
    host='localhost',
    user='root',
    password='保密',
    database='member',
    port=3306,
    charset='utf8')
with DB(DATABASES_CONF) as cur:
    cur.execute('SELECT * FROM A')
    print(cur.fetchone())


运行结果

我的mysql数据库

2.操作mysql的上下文管理器代码详解

一个类里面只要实现了__enter____exit__方法,这个类所创建出来的对象就是个上下文管理器对象了。

通过with可以触发上下文管理器。上下文管理器对象会自动调用里面的__enter__方法。

实现一个操作数据库的上下文,当我们触发这个上下文管理器的时候,这个时候会返回一个操作数据库的游标。

要连接数据库操作数据库,有些参数要自己传进去,比如数据库地址、账号、密码、端口、操作的是哪个数据库和编码格式。

DB是上下文管理器的类,这个会创建一个对象。DATABASES_CONF会传到init方法里面去。

在init方法里面接收data_conf这个数据的配置。在这里接受到这个参数之后,通过pymsql这个模块连接到数据库。连接到数据库之后会返回一个con连接,那么通过这个连接获取到cursor这个操作的游标。

创建对象,这里DB(DATABASES_CONF)完了之后,as cur返回的数据是通过__enter__这个方法里面返回的:

在这个方法里面把获取的连接的游标返回出去。

返回出去之后,在with语句里面就可以实现sql语句了:

查询了条数据,获取了第一条数据看一下。

with下面的语句执行完毕之后,上下文管理器里面的__exit__方法会自动触发。当这个方法触发的时候,会将数据库的连接在里面进行关闭。首先关闭游标,再关闭和数据库的连接:

通过这个就可以实现一个操作数据库的上下文管理器。操作数据库的时候只需要传进去相关的配置,然后拿到这个游标就可以对数据库进行相关的操作。操作完毕以后不需要手动关闭,上下文管理器会为我们自动关闭。

3.cur.fetchone()cur.fetchall()的区别

cur.fetchone():查询出有多条数据的时候,将只取最上面的第一条结果。

cur.fetchall():查询出有多条数据的时候,将返回所有结果。

运行结果

二、描述__slots__属性的作用,并修改读取excel类中保存用例的类

1.限制对象属性,指定指定的slots的属性。 2.节约内存。

代码语言:javascript
复制
class Case:
    __slots__ = ['case_id','title','url','data','excepted']
    
    def __init__(self):
        self.case_id=None
        self.title=None
        self.url=None
        self.data=None
        self.excepted=None

之前学自动化的时候,存数据的3种方法:

1.数据存在列表里面,列表里面里面嵌套字典。 2.数据存在列表里面,列表里面里面嵌套列表。 3.数据存在列表里面,列表里面里面放的是对象。

这个类大量创建对象的时候,每一条用例都要创建一个对象来保存。从一个excel里面读出来几百条用例,就要创建几百个对象。用slots就可以节约内存。

如果单纯读取文件的类,只创建一两个,两三个对象,这个时候没必要用slots了,因为也消耗不了多少内存。只有创建大量对象的时候,加上slots。

三、面向对象的三大特征是什么?多态又是什么?

特征:封装、继承、多态。 多态:指的是一类事物有多种形态,一个抽象类有多个子类,不同的子类对象调用相同的方法,产生不同的执行结果。

多态:指的是一类事物有多种形态,建立在继承的基础上,一个抽象的父类有多个子类,每个子类都具有相同的方法。在函数里只需要指定父类这种类型的对象就行了,传的是哪个子类不用管,只要是这个父类就行了。

在每个子类里面实现不同的方法,通过这个对象调用同一个方法。但是因为传进来的子类不同,子类里面方法的实现又不同,每个方法做的事情不一样。

这个时候传入同一类事物,在这里出现多种表现形式。不同的子类传进来的嘛,从而产生不同的执行结果。

四、私有属性怎么定义,不同的定义方式有什么区别?

单下划线、双下划线开头。 单下划线开头的,对外是公开的,可以直接访问。 双下划线开头的,对外不能直接访问,为了保护这个变量(对外改了一个名字),在原有的属性名前面加了一个_类名。

除标明“图片来自网络”的图片,其它文章中的图片皆为本人所画,计算机知识都一样,如有雷同,纯属巧合。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2022-04-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 清菡软件测试 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 目录
    • 一、实现一个操作mysql的上下文管理器(可以自动断开连接)
      • 1.代码
      • 2.操作mysql的上下文管理器代码详解
      • 3.cur.fetchone()与cur.fetchall()的区别
    • 二、描述__slots__属性的作用,并修改读取excel类中保存用例的类
      • 三、面向对象的三大特征是什么?多态又是什么?
        • 四、私有属性怎么定义,不同的定义方式有什么区别?
        相关产品与服务
        云数据库 SQL Server
        腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档