# application/db/query_executor.py

class QueryResults:
    def __init__(self, database):
        self.database = database  # Database instance

    def fetch_query_results(self, statement, **fields):
        with self.database as db:
            if fields:
                query = statement.format(*fields['column_name'])
                params = tuple(fields['params'])
                db.execute(query, params)
            else:
                db.execute(statement)
            return db.fetchall()

    def insertion(self, commit=True, **query):
        self.database.commit = commit
        with self.database as db:
            db.execute(query['statement'], query['params'])
            return db.lastrowid

    def updation(self, commit=True, **query):
        self.database.commit = commit
        with self.database as db:
            db.execute(query['statement'], query['params'])

    def deletion(self, commit=True, **query):
        self.database.commit = commit
        with self.database as db:
            db.execute(query['statement'], query['params'])
