程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

python上下文管理器協議的實現

編輯: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:版本2sql = '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上下文管理器 內容請搜索軟件開發網以前的文章或繼續浏覽下面的相關文章希望大家以後多多支持軟件開發網!



  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved