温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

python上下文管理器协议怎么实现

发布时间:2022-06-24 09:35:16 来源:亿速云 阅读:136 作者:iii 栏目:开发技术

这篇文章主要介绍了python上下文管理器协议怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇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()

关于“python上下文管理器协议怎么实现”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“python上下文管理器协议怎么实现”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI