python上下文管理器协议的实现
作者:henry_rhy 发布时间:2023-08-28 18:32:18
标签:python,上下文,管理器,协议
前言
在上下文管理器协议的过程中,涉及到两个魔术方法__enter__方法 和 __exit__方法
在python中所有实现了上下文管理器协议的对象 都可以用使用with操作
with启动了对象的上下文管理器
上下文管理器协议:
__enter__方法: 进入enter方法返回的结果被as后面的变量接收
exit: 退出with中所有的语句执行完毕执行 执行 exit
实现一个简单的文件操作来看下上下文管理器协议:
class MyOpen:
# 实例化
def __init__(self, filename, mode, encoding):
self.filename = filename
self.mode = mode
self.encoding = encoding
def __enter__(self):
print("---enter---方法")
# 执行文件打开操作
self.f = open(self.filename, self.mode, encoding=self.encoding)
return self.f
def __exit__(self, exc_type, exc_val, exc_tb):
"""
:param exc_type: 异常类型
:param exc_val: 异常信息
:param exc_tb: 异常溯源对象
:return:
"""
print('----enter---')
self.f.close()
with MyOpen('hr.txt', 'w', encoding='utf-8') as f:
print(f.write('当前打开了文件,写入了数据:23323232'))
用pymysql实现一个操作数据库的类,实现上下文管理器协议,实现退出上下文时,自动关闭游标,断开连接
todo:版本1
# todo:版本1:
class mysql_db(object):
#实例化属性
def __init__(self):
1.连接数据库
self.cou = pymysql.connect(
host= "数据库主机地址",
port= 端口,
user="登录数据库的账号",
password="登录数据库的密码",
database="数据库名称",
charset='utf8', 编码格式
cursorclass=pymysql.cursors.DictCursor 将默认的元组格式转换成字典格式输出
)
2.创建游标
self.cur = self.cou.cursor()
def __enter__(self):
return self.cur 返回cur对象
def __exit__(self, exc_type, exc_val, exc_tb):
"""
:param exc_type: 异常类型
:param exc_val: 异常信息
:param exc_tb: 异常溯源对象
:return:
"""
#关闭游标
self.cur.close()
# 关闭数据库连接
self.cou.close()
def Obtain_one_date():
with mysql_db() as db:
db.execute('select * from t_customer LIMIT 4') 使用execute方法进行查询语句
content = db.fetchone() 返回一条数据的查询的结果
print(content)
# 函数调用
Obtain_one_date()
todo:版本2
sql = 'select * from t_customer LIMIT 4'
def mysql_db1(**kwargs):
return pymysql.connect(host=kwargs.get('host', 'xxxx'),
user=kwargs.get("user",'xxxx'),
passwd=kwargs.get("passwd",'xxxx'),
database=kwargs.get("database",'xxxx'),
port=kwargs.get('port', xxxx),
charset=kwargs.get('charset', 'utf8'))
1.创建数据库连接对象
cou = mysql_db1()
2.创建游标
with cou.cursor() as cu:
cu.execute(sql) 使用execute方法进行查询语句
commt = cu.fetchone() 返回一条数据的查询的结果
print(commt)
# 函数调用
mysql_db1()
来源:https://blog.csdn.net/qq_40236497/article/details/125415201
0
投稿
猜你喜欢
- 50个常用sql语句 Student(S#,Sname,Sage,Ssex) 学生表 Course(C#,Cname,T#) 课程表 SC(
- 在对跨多个表格的数据进行组合时,有时很难搞清楚要使用哪一个SQL句法。我将在这里对将多个表格中的查询合并至单一声明中的常用方式进行阐述。在这
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 12 - Drag and Drop using
- 我们有理由相信采用新的内核版本(2.2.16-3 smp)也应该有性能的提升: OS2: Newer minor version kerne
- 代码如下:'返回指定文件夹中文件的数目,传入值为被检测文件夹的硬盘绝对路径 function CountFile
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN&
- 如何用JAVASCRIPT格式化数字成货币那种表示法?,比如说 34585962.00显示 为 34,585,962.00<scrip
- 1.将以下代码加入到HEML的<body></body>之间<SCRIPT language=jav
- 在上一篇《服务器XMLHTTP(Server XMLHTTP in ASP)基础》中我介绍了一下ServerX
- PHP观察者模式(Observer Pattern)观察者模式是一种行为设计模式,它定义了一种订阅机制,让一个或多个对象(观察者)自动被通知
- 推荐阅读:Oracle读取excel数据oracle导出excel(非csv)的方法有两种,1、使用sqlplus spool,2、使用包体
- 今天有朋友问到如下一则案例,ORA-01114,ORA-27067以及OSD-04026错误同时出现:*** ACTION NAME:()
- 一、get//get请求function getUrl($url, $header = []){ $ch = cu
- 本文实例讲述了PHP判断是否微信访问的方法。分享给大家供大家参考,具体如下:在开发中有时需要禁止或者仅允许微信浏览器进行访问,则此时就需要对
- 很久没有更新blog了,这段时间实在是发生了很多的事,累身累心。但还是有很多想做的事,比如更新merceCSS、把一直以来所总结的有关模块化
- Web2.0时代,体验式营销,体验式网站设计开始走向主流,那么体验式网站到底意味着什么?具体表现在那些地方?周末,根据建站的一点经验和观察,
- 以XML格式查看查询结果通过使用传统—xml 选项调用MySQL命令行客户程序,你可以以XML格式(而不是传统的列表形式
- 对于比较长的数字组成的字符串,我们一般会用逗号(,)隔开来格式化数字,从右往左每三个数字用一个逗号分组隔开。为什么要用逗号隔开数字呢?因为当
- 今天在这里,不以设计师的身份,而从一个普通用户的角度和各位聊聊设计中蕴含的那份情感,关于情感再产品设计中的意义,聊聊设计中的那份源于“心”的
- 在工作实践和学习中,如何开启 MySQL 数据库的远程登陆帐号算是一个难点的问题,以下内容便是在工作和实践中总结出来的两大步骤,能帮助DBA