mysql异常处理装饰器
mysql装饰器的使用
import pymysql from pymysql import err from contextlib import closing import json def ini(): #json 配置文件 with open('../conf/cfg.json') as f: config = json.load(f) return config # 定义异常处理装饰器 def db_exception_handler(func): def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except pymysql.err.OperationalError as e: print(f"[ERROR] Operational Error in {func.__name__}: {str(e)}") except pymysql.err.ProgrammingError as e: print(f"[ERROR] Programming Error in {func.__name__}: {str(e)}") except pymysql.err.IntegrityError as e: print(f"[ERROR] Integrity Error in {func.__name__}: {str(e)}") except Exception as e: print(f"[ERROR] General Error in {func.__name__}: {str(e)}") finally: # 确保在所有情况下都关闭数据库连接 if 'conn' in kwargs and kwargs['conn']: kwargs['conn'].close() return wrapper #创建数据库链接上下文管理器 def Connect_database(host, port, user, password, charset, database): mysql = pymysql.connect(host = host, port = port, user = user, password = password, charset = charset, database = database) db = mysql.cursor() return db,mysql #关闭mysql链接 def Close_database(db,mysql): # 游标关闭 db.close() # 关闭连接 mysql.close() #使用装饰器的查询函数 @db_exception_handler def query_data(conn): conn.execute("SELECT * FROM users LIMIT 5") results = db.fetchall() for row in results: print(row) # 主程序 if __name__ == "__main__": # 获取mysql配置文件 config = ini() mysqlConfig = config['mysql'] # 获取数据库连接 db,mysql = Connect_database(mysqlConfig['host'],mysqlConfig['port'],mysqlConfig['user'],mysqlConfig['password'],mysqlConfig['charset'],mysqlConfig['database']) # 查询数据 query_data(db) # 手动关闭连接(虽然装饰器也会确保关闭) Close_database(db,mysql)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
2022-02-18 四层负载均衡和七层负载均衡
2022-02-18 nginx重新编译添加ssl模块--with-http_ssl_module