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

目录

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

    • 1.代码

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

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

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

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

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

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

1.代码

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())
2b852a3777886226730b7c141a6d9763.png
运行结果
fe01417a613ce18452ad882524322416.png
我的mysql数据库

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

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

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

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

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

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

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

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

b1ff80b2f8c41e5e39399f7d67e8d9f5.png

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

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

fa329bb7d0d06b241d7cb6ee63a71e83.png

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

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

59fea26db65d59a1ec328086032bbac6.png

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

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

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

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

2c8bf274e073044616ab88bc3eb1cf60.png
运行结果

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

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

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。

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

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

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

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

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

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

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


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

公众号 清菡软件测试 首发,更多原创文章:清菡软件测试 170+ 原创文章,欢迎关注、交流,禁止第三方擅自转载。如有转载,请标明出处。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清菡软件测试

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值