pymysql上下文请求实现
# -*- coding: utf-8 -*- class mysql_ctx(object): def __init__(self, *args, **kwargs): self.user, self.password, self.host, self.port = args log_obj.info( "获取到的数据库配置{}=={}=={}=={}=={}".format(self.user, self.password, self.host, self.port, self.db_name)) self.pool = PooledDB(creator=pymysql, maxconnections=10, mincached=2, maxcached=9, maxshared=9, blocking=True, maxusage=None, setsession=[], ping=0, host=self.host, user=self.user, password=self.password, database=self.db_name, port=self.port, charset='utf8') self.conn = self.pool.connection() self.cursor = self.conn.cursor(cursor=self.type) def __enter__(self, ): self.__enter_flag += 1 return self def __exit__(self, exc_type, exc_val, exc_tb): self.connect_close() return True def connect_close(self, ): self.cursor.close() self.conn.close() def query_data(self, sql, data=None, num=0): """ :param sql: select语句 :param data: :param num: 0===>{k:v} 1 [{k1:v1},{k2:v2}] :return: """ try: self.cursor.execute(sql, data) except Exception as e: raise TypeError(e.args) else: self.connect_close() if self.__enter_flag > 0 else None return self.cursor.fetchone() if num == 0 else self.cursor.fetchall() def exe_sql(self, sql, data=None, num=0): """ :param sql: delete update insert :param data: :param num: :return: """ try: ret = self.cursor.execute(sql, data) if num == 0 else self.cursor.executemany(sql, data) except Exception as e: self.conn.rollback() raise e.args else: self.conn.commit() self.connect_close() if self.__enter_flag > 0 else None return ret if __name__ == '__main__': db_obj1 = mysql_ctx(db_name='hzero_platform') str_sql1 = "SELECT * FROM hiam_user_info limit 1" data1 = db_obj1.query_data(sql=str_sql1, num=0) print(data1) with mysql_ctx(db_name='hzero_platform') as db_obj2: data2 = db_obj2.query_data(sql=str_sql1, num=1) print(data2)