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)

  

posted @ 2021-05-28 09:37  Yuan_x  阅读(40)  评论(0编辑  收藏  举报