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