from django.db import connection


def fetch_query_results(query, params=None):
    """
    Executes a raw SQL query with optional parameters and returns
    a list of dictionaries with column names as keys.

    :param query: str - The SQL query (with placeholders %s)
    :param params: list/tuple - Parameters for the query
    :return: list[dict] - Rows as dictionaries
    """
    with connection.cursor() as cursor:
        cursor.execute(query, params or [])
        columns = [col[0] for col in cursor.description]
        results = [
            dict(zip(columns, row))
            for row in cursor.fetchall()
        ]
    return results