python之with语句结合上下文管理器
所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类。
我们可以通过with语句结合上下文管理器简化一些操作。
使用with语句结合自定义上下文管理器完成数据库相应的操作,代码实现如下:
# 1. 导入模块
import pymysql # 创建自定义上下文管理器对象
class MyDatabase(object):
# 接收参数并创建数据库连接对象
def __init__(self, host, port, user, passwd, database):
self.__db = pymysql.Connection(host, port, user, passwd, database, charset='utf8') # 返回数据库连接对象
def __enter__(self):
return self.__db # 关闭数据库连接
def __exit__(self, exc_type, exc_val, exc_tb):
self.__db.close() def main():
# 使用with关键字接收enter返回的对象给db
with MyDatabase('localhost', 3306, 'root', 'mysql', 'JDDB') as db:
# 利用db创建游标
cur = db.cursor()
sql = '''select * from %s'''
cur.execute(sql, (goods,))
result = cur.fetchall()
for i in result:
print(i)
# 关闭游标
cur.close() # 程序入口
if __name__ == '__main__':
main()
上下文管理器类的代码流程:
1.编写__init__方法用来接收参数,并创建数据库连接对象;
2.重写__enter__方法,返回数据库连接对象;
3.重写__exit__方法,用来关闭数据库连接;
with语句代码流程:
1.当将创建对象的语句放到with语句里时不会创建对象,而是接受__enter__方法返回的对象并给对象起个别名;
2.使用接受到的对象即数据库连接对象,创建游标;
3.编写SQL语句,并通过游标执行SQL语句;
4.获取SQL语句的查询结果,并显示出来;
5.关闭游标;
6.当with语句内的代码执行完毕后自动执行__exit__方法关闭数据库连接。
注意:with MyDatabase() as db ---> db = MyDatabase().__enter__()
利用with结合自定义上下文类实现HTTP服务端:
# 1.导入socket模块
import socket class MySocket(object):
# 2.编写init方法接收port参数
def __init__(self, port):
self.__port = port
# 3.创建socket对象
self.__sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # 4.编写enter方法返回套接字对象
def __enter__(self):
# 设置端口复用
self.__sk.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# 绑定端口
self.__sk.bind(self.__port)
# 设置端口监听
self.__sk.listen(128)
# 返回套接字对象
return self.__sk # 5.编写exit方法关闭套接字对象
def __exit__(self, exc_type, exc_val, exc_tb):
self.__sk.close() def main():
# 使用with关键字 并接受返回的套接字对象给sk
with MySocket(8000) as sk:
# 等待客户端连接
clicent, ip_port = sk.accept()
recv_data = clicent.recv(1024)
print(recv_data.decode('utf-8'))
# 编写HTTP响应报文
http_line = 'HTTP/1.1 GET 200 OK\r\n'
http_header = 'Server PWS/1.0\r\n'
http_body = 'Welcome to index!\r\n'
send_data = (http_line + http_header + '\r\n' + http_body).encode('utf-8')
clicent.send(send_data)
# 关闭客户端连接
clicent.close() # 编写程序入口
if __name__ == '__main__':
main()
自定义上下文管理器类的代码解读:
1.编写__init__方法,用来接收参数并创建套接字对象;
2.编写__enter__方法,并使用套接字对象设置端口复用、绑定端口、并设置监听,然后返回套接字对象;
3.编写__exit__方法,关闭套接字对象。
with语句代码解读:
1.接收enter返回的套接字对象,并起个别名,
2.通过返回套接字对象等待客户端连接,
3.接收客户端连接成功后会返回一个新的套接字和IP端口号,
4.使用客户端套接字发送HTTP响应报文
5.关闭客户端连接
6.当with语句中的代码执行完毕后自动执行__exit__方法,关闭服务器连接
with管理器例题:
aaarticlea/png;base64,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" alt="" />
# 要求1:可以使用with Mysql('heima', 'root', 'mysql') as cursor:
#
#
# 语句获取游标对象cursor,操作cursor即可完成数据库操作;
#
#
# 要求2:Mysql类中三个参数分别对应要连接的数据库名、用户名、密码;
#
#
# 要求3:如果数据库操作正常,上下文中自动提交(自动执行commit()方法),
# # 关闭游标并且关闭数据库连接;
#
#
# 要求4:如果数据库操作出现异常,上下文中自动回滚(自动执行rollback()方法),
# 关闭游标并且关闭数据库连接,捕获异常并打印报错信息。
import pymysql global bool class Mysql(object):
def __init__(self, database, user, password):
self.__db = pymysql.Connection(host='localhost', port=3306, database=database, user=user, password=password,
charset='utf8') def __enter__(self):
self.__cur = self.__db.cursor()
return self.__cur def __exit__(self, exc_type, exc_val, exc_tb):
if exc_type:
self.__db.rollback()
print(exc_type)
print(exc_val)
print(exc_tb)
else:
self.__db.commit()
self.__cur.close()
self.__db.close()
return True def main():
with Mysql('heima', 'root', 'mysql') as cursor:
sql = '''SQL语句'''
cursor.execute(sql) if __name__ == '__main__':
main()
注意:__exit(self, exc_type, exc_val, exc_tb)__函数中的三个参数exc_type, exc_val, exc_tb只有在程序异常退出时才会有值,
只要判断这三个参数中的其中一个,如果有值那就说明程序存在异常。
当__exit()__函数返回值为Flase(默认)时,为显示程序异常信息(红色字),
当函数返回值为True时,为不显示程序异常信息。
python之with语句结合上下文管理器的更多相关文章
- python2.7高级编程 笔记一(Python中的with语句与上下文管理器学习总结)
0.关于上下文管理器上下文管理器是可以在with语句中使用,拥有__enter__和__exit__方法的对象. with manager as var: do_something(var) 相当于以 ...
- 【Python学习笔记】with语句与上下文管理器
with语句 上下文管理器 contextlib模块 参考引用 with语句 with语句时在Python2.6中出现的新语句.在Python2.6以前,要正确的处理涉及到异常的资源管理时,需要使用t ...
- 流畅的python第十五章上下文管理器和else块学习记录
with 语句和上下文管理器for.while 和 try 语句的 else 子句 with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并且负责清理上下文.这么做能避免错误并减少样板代码, ...
- 浅淡python中的with,上下文管理器
例子一 首先来看一段代码: class Foo(object): def __init__(self): print('实例化一个对象') def __enter__(self): print('进入 ...
- python中的with与上下文管理器
#转载请留言联系 很多人平时需要打开文件进行读取写入操作时,通常这样: f = open('文件路径','w') f.write(data) f.close 这样写有一个潜在的问题,如果在调用 wri ...
- Python中的上下文管理器和with语句
Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围.本文是针对于该功能的思考总结. 为什么需要上下文管理器? 首先, ...
- python上下文管理器ContextLib及with语句
http://blog.csdn.net/pipisorry/article/details/50444736 with语句 with语句是从 Python 2.5 开始引入的一种与异常处理相关的功能 ...
- (转)Python中的上下文管理器和Tornado对其的巧妙应用
原文:https://www.binss.me/blog/the-context-manager-of-python-and-the-applications-in-tornado/ 上下文是什么? ...
- Python上下文管理器你学会了吗?
什么是上下文管理器 对于像文件操作.连接数据库等资源管理的操作,我们必须在使用完之后进行释放,不然就容易造成资源泄露.为了解决这个问题,Python的解决方式便是上下文管理器.上下文管理器能够帮助你 ...
随机推荐
- 红帽学习笔记[RHCE]网络配置与路由转发
目录 网络配置基本的IPV4与IPV6 拓扑图 操作 新加一块网卡 将增加的网卡分别加到两台虚拟机上 在两台虚拟机上配置IPV4与 IPV6 配置域名访问 拓展路由转发 拓扑图 操作 关于网关设置 重 ...
- drf组件之jwt认证
drf组件之jwt认证模块 一.认证规则 全称:json web token 解释:加密字符串的原始数据是json,后台产生,通过web传输给前台存储 格式:三段式 - 头.载荷.签名 - 头和载荷才 ...
- 根据json数据中某一个属性 处理数组重组的方法 (二种)
需求:根据role 的不同分组 渲染页面 进行后期操作 后台返回数据: 因为后台返回的json数据不是我们想要的 所以就得自己来了~ 要啥样整啥样 js: 第一种处理方法 使用方法: 1: th ...
- python3 之 变量作用域详解
作用域: 指命名空间可直接访问的python程序的文本区域,这里的 ‘可直接访问’ 意味着:对名称的引用(非限定),会尝试在命名空间中查找名称: L:local,局部作用域,即函数中定义的变量: E: ...
- 容器镜像服务联手 IDE 插件,实现一键部署、持续集成与交付
容器技术提供了一种标准化的交付方式,将应用的代码以及代码环境依赖都打包在一起,成为一个与环境无关的交付物,可以被用在软件生命周期的任何阶段,彻底改变了传统的软件交付方式. 甚至可以说,是在容器技术之后 ...
- 【Luogu P3834】可持久化线段树(主席树)
Luogu P3834 可持久化数据结构就是支持在历史版本上进行查询和修改操作的数据结构. 主席树就是对线段树的改进,使之可持久化. 前置知识:动态开点线段树 我们利用权值(值域)线段树统计区间内的数 ...
- 题解-洛谷P2010-回文日期
原题链接: https://www.luogu.org/problem/P2010 题目简述: 牛牛习惯用8位数字表示一个日期,其中,前4位代表年份,接下来2位代表月份,最后22位代表日期.显然:一个 ...
- nginx离线部署脚本
#! /bin/bashbasepath=$(cd `dirname $0`; pwd)nginx_path=/usr/localfile_name=nginxecho "--------- ...
- Windows Server 2012R2 DHCP服务介绍及搭建 转载
转载链接:https://blog.csdn.net/KamRoseLee/article/details/79251830 一.什么是DHCP DHCP(DynamicHost Configur ...
- Linux 基本命令操作 (文件共享) 一
前言:在学习Linux过程中,遇到一些经典而又基本的命令操作,想记录下来去帮助刚学Linux的同学.下面是有关相关的操作,我会进行详细的分解步骤:希望能够帮助到你们.由于时间仓促,再加上笔者的能力有限 ...