python上下文管理器协议的实现

目录
  • 前言
  • todo:版本1
  • todo:版本2

前言

在上下文管理器协议的过程中,涉及到两个魔术方法__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()

到此这篇关于python上下文管理器协议的实现的文章就介绍到这了,更多相关python上下文管理器 内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python中with语句结合上下文管理器操作详解

    前言 所谓上下文管理器即在一个类中重写了__enter__方法和__exit__方法的类就可以成为上下文管理器类. 我们可以通过with语句结合上下文管理器简化一些操作. 使用with语句结合自定义上下文管理器完成数据库相应的操作,代码实现如下: # 1. 导入模块 import pymysql # 创建自定义上下文管理器对象 class MyDatabase(object): # 接收参数并创建数据库连接对象 def __init__(self, host, port, user, passw

  • python上下文管理器异常问题解决方法

    对于异常的使用上,当我们在捕捉到错误时,会有一个抛出的选项让我们做决定.不过加入了上下文管理器后,就不用对异常进行选择了,因为其作用是不必抛出.下面我们就python上下文管理器处理异常进行说明,分析其中的三个参数,最后带来一个处理异常的实例供大家进行学习. 1.异常说明 异常可以在__exit__ 进行捕获并由你自己决定如何处理,是抛出还是不抛出.在__exit__ 里返回 True(没有return 就默认为 return False),就相当于告诉 Python解释器,这个异常我们已经捕获

  • Python上下文管理器实现方法总结

    目录 什么时候可以考虑上下文管理器 方法1(上下文管理器协议) 方法2(@contextmanager) 方法3(contextlib.closing()) 什么时候可以考虑上下文管理器 当你的代码逻辑需要用到如下关键字时,可以考虑使用上下文管理器让你的代码更加优雅: try: ... finally: ... 接下来介绍实现上下文管理器的三种方法. 方法1(上下文管理器协议) 总所周知,open()是默认支持上下文管理器的.所以打开一个txt文件,并向里面写入内容,再关闭这个文件的代码可以这样

  • Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析

    本文实例讲述了Python上下文管理器类和上下文管理器装饰器contextmanager用法.分享给大家供大家参考,具体如下: 一. 什么是上下文管理器 上下文管理器是在Python2.5之后加入的功能,可以在方便的需要的时候比较精确地分配和释放资源, with便是上下文管理器的最广泛的应用, 比如: with open("test/test.txt","w") as f: f.write("hello") 这上会比使用try:...finall

  • Python实现上下文管理器的方法

    问题 你想自己去实现一个新的上下文管理器,以便使用with语句. 解决方案 实现一个新的上下文管理器的最简单的方法就是使用 contexlib 模块中的 @contextmanager 装饰器. 下面是一个实现了代码块计时功能的上下文管理器例子: import time from contextlib import contextmanager @contextmanager def timethis(label): start = time.time() try: yield finally:

  • 一文带你搞懂Python上下文管理器

    目录 一.什么是上下文管理器 二.如何实现上下文管理器 1. 通过类实现 1)_enter_ 2)_exit_ 2. 通过contextlib实现 总结 一.什么是上下文管理器 我们在处理文件的时候经常看到下面这样的代码,它即是上下文管理器: with open('test.txt', encoding='utf-8') as f: print(f.readlines()) 它的含义是打开当前目录下的test.txt文件并打印它里面的内容,与下面的代码效果是一样的: f = open('test

  • Python中的上下文管理器和with语句的使用

    Python2.5之后引入了上下文管理器(context manager),算是Python的黑魔法之一,它用于规定某个对象的使用范围.本文是针对于该功能的思考总结. 为什么需要上下文管理器? 首先,需要思索下为什么需要引入上下文管理器. 在正常情况下,管理各种系统资源(如文件).数据库连接时,通常是先打开这些资源,执行完相应的业务逻辑,最后关闭资源. 举两个例子: 1.使用Python打开一个文件写入内容,之后需要关闭这个文件.如果不正常关闭的话可能会在文件操作时出现异常,因为系统允许你打开的

  • Python标准模块--ContextManager上下文管理器的具体用法

    写代码时,我们希望把一些操作放到一个代码块中,这样在代码块中执行时就可以保持在某种运行状态,而当离开该代码块时就执行另一个操作,结束当前状态:所以,简单来说,上下文管理器的目的就是规定对象的使用范围,如果超出范围就采取"处理". 这一功能是在Python2.5之后引进的,它的优势在于可以使得你的代码更具可读性,且不容易出错. 1 模块简介 在数年前,Python 2.5 加入了一个非常特殊的关键字,就是with.with语句允许开发者创建上下文管理器.什么是上下文管理器?上下文管理器就

  • Python上下文管理器全实例详解

    Python上下文管理器 简介 最近用到这个,仔细了解了一下,感觉是十分有用的,记录一下 使用场景 当我们需要获取一个临时打开的资源,并在使用完毕后进行资源释放和异常处理,利用try-catch语句可以完成,举个例子. 打开文件: f = None try: print("try") f = open("__init__.py", "r") print(f.read()) except Exception as e: print("ex

  • python上下文管理器协议的实现

    目录 前言 todo:版本1 todo:版本2 前言 在上下文管理器协议的过程中,涉及到两个魔术方法__enter__方法 和 __exit__方法 在python中所有实现了上下文管理器协议的对象 都可以用使用with操作 with启动了对象的上下文管理器 上下文管理器协议: __enter__方法: 进入enter方法返回的结果被as后面的变量接收 exit: 退出with中所有的语句执行完毕执行 执行 exit 实现一个简单的文件操作来看下上下文管理器协议: class MyOpen:  

  • Python上下文管理器和with块详解

    上下文管理器和with块,具体内容如下 上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样. with 语句的目的是简化 try/finally 模式.这种模式用于保证一段代码运行完毕后执行某项操作,即便那段代码由于异常. return 语句或 sys.exit() 调用而中止,也会执行指定的操作. finally 子句中的代码通常用于释放重要的资源,或者还原临时变更的状态. ==上下文管理器协议包含enter和exit两个方法==. with 语句开

  • python 上下文管理器及自定义原理解析

    这篇文章主要介绍了python 上下文管理器原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Python 提供了 with 语法用于简化资源操作的后续清除操作,是 try/finally 的替代方法,实现原理建立在上下文管理器之上. Python 提供了一个 contextmanager 装饰器,更进一步简化上下管理器的实现方式. 上下文管理器是Python2.5之后才出现的概念.上下文管理器规定了某个对象的使用范围,当进入或者离开了使

  • Python上下文管理器用法及实例解析

    这篇文章主要介绍了Python上下文管理器用法及实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 with上下文管理器 语法:with ... as ... 如:with open('test.txt', 'r') as fp,打开一个文件作为文件句柄对象赋值给fp with是一个语句块,上下文管理器中里面实现了两个方法:enter, exit,enter是进入代码块前自动调用的方法,exit是 退出with语句块时调用的,例如,文件对象

  • Python上下文管理器Content Manager

    在 Python 中,我们会经常听到上下文管理器(Context Manager),那我们探讨下这是什么,又有什么功能. 在 Python 中的上下文管理器中,使用 with 打开文件是使用最多的,其中离开 with 包含的语句后会执行一些类似于清理的工作,如关闭文件,关闭连接对象等操作. 实践 我们在代码实践的时候,忽略了在同一代码片段中,先打开文件,然后直接对文件进行其他处理,因为这样没有任何意义,资源是处于被占用的情况. 先看下面检测的代码: #!/usr/bin/env python #

  • python上下文管理器使用场景及异常处理

    目录 引言 1.先看看最简单的例子,with语句 2.什么是上下文管理器? 3.上下文管理器的原理过程如下: 4.上下文管理器的应用场景: 4.1 数据库连接 4.2上下文管理器的异常处理 引言 使用上下文管理器,可以让代码更加优雅简洁.当然,上下文的管理器的作用不止于此,它内部的实现机制,能很好的处理代码异常,提升代码的复用性 1.先看看最简单的例子,with语句 # 创建一个文件写入字符串"Python" f = open('123.txt', 'w') f.write("

随机推荐