async def METHOD_NAME(
    self, query: str, values: Optional[list] = None
) -> Tuple[int, List[dict]]:
    async with self.acquire_connection() as connection:
        self.log.debug("%s: %s", query, values)
        if values:
            params = [query, *values]
        else:
            params = [query]
        if query.startswith("UPDATE") or query.startswith("DELETE"):
            res = await connection.execute(*params)
            try:
                rows_affected = int(res.split(" ")[1])
            except Exception:  # pragma: nocoverage
                rows_affected = 0
            return rows_affected, []
        rows = await connection.fetch(*params)
        return len(rows), rows