import pymysql
import traceback
class
mysqlcontextmanager
:"""
mysql context manager
"""def__init__
(self, host=
"localhost"
, port=
3306
, user=
"root"
, password=
"123456"
, database="")
: self.host = host
self.port = port
self.user = user
self.password = password
self.database = database
def__enter__
(self)
:"""
上文管理器 返回的結果 會被賦給as 關鍵字之後的變數
:return: cursor
"""try:
self.db_conn = pymysql.connect(host=self.host, port=self.port, user=self.user, password=self.password,
database=self.database, charset=
"utf8"
) self.cursor = self.db_conn.cursor(
)return self.cursor
except exception as e:
traceback.print_exc(
)raise e
def__exit__
(self, exc_type, exc_val, exc_tb)
:"""
下文管理器 選擇性地處理包裝**塊**現的異常
:param exc_type: 異常型別 預設為 none,發生異常,引數被填充
:param exc_val: 異常例項 預設為 none,發生異常,引數被填充
:param exc_tb: 異常回溯 預設為 none,發生異常,引數被填充
:return:
"""try:
if exc_type:
self.db_conn.rollback(
)# 返回false 傳播異常
# 返回true 終止異常 不要這麼做
# 丟擲不同的異常 代替 原有異常
return
false
else
: self.db_conn.commit(
)except exception as e:
raise e
finally
: self.cursor.close(
) self.db_conn.close(
)if __name__ ==
'__main__'
:# 根據實際,傳入資料庫引數
with mysqlcontextmanager(
)as db_cursor:
select_sql =
"select * from test"
# 執行sql語句 返回影響的行數
db_cursor.execute(select_sql)
# 返回執行結果
result = db_cursor.fetchall(
)print
(result)
python使用上下文管理器運算元據庫
with 語法用於簡化資源操作的後續清除操作,是 try finally 的替代方法,實現原理建立在上下文管理器之上 如下,資料庫相關操作依庫 from pymysql import class db def init self,my database1,my password self.conn ...
python 上下文管理器
上下文管理器允許你在有需要的時候,精確地分配和釋放資源。使用上下文管理器最廣泛的案例就是with語句了。想象下你有兩個需要結對執行的相關操作,然後還要在它們中間放置一段 上下文管理器就是專門讓你做這種事情的。舉個例子 with open some file w as opened file open...
python上下文管理器
上下文管理器是乙個包裝任意 塊的物件。上下文管理器保證進入上下文管理器時,每次 執行的一致性 當退出上下文管理器時,相關資源會被正確 這裡被正確 指的是在 exit 方法自定義 比如關閉資料庫游標 值得注意的是,上下文管理器一定能夠保證退出步驟的執行。如果進入上下文管理器,根據定義,一定會有退出步驟...