目录
- 一、实现一个操作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。
三、面向对象的三大特征是什么?多态又是什么?
特征:封装、继承、多态。 多态:指的是一类事物有多种形态,一个抽象类有多个子类,不同的子类对象调用相同的方法,产生不同的执行结果。
多态:指的是一类事物有多种形态,建立在继承的基础上,一个抽象的父类有多个子类,每个子类都具有相同的方法。在函数里只需要指定父类这种类型的对象就行了,传的是哪个子类不用管,只要是这个父类就行了。
在每个子类里面实现不同的方法,通过这个对象调用同一个方法。但是因为传进来的子类不同,子类里面方法的实现又不同,每个方法做的事情不一样。
这个时候传入同一类事物,在这里出现多种表现形式。不同的子类传进来的嘛,从而产生不同的执行结果。
四、私有属性怎么定义,不同的定义方式有什么区别?
单下划线、双下划线开头。 单下划线开头的,对外是公开的,可以直接访问。 双下划线开头的,对外不能直接访问,为了保护这个变量(对外改了一个名字),在原有的属性名前面加了一个_类名。
除标明“图片来自网络”的图片,其它文章中的图片皆为本人所画,计算机知识都一样,如有雷同,纯属巧合。