首頁 > 軟體

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

2022-06-23 18:00:55

前言

在上下文管理器協定的過程中,涉及到兩個魔術方法__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上下文管理器 內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com