No debe usar .format()
para incluir valores en una consulta sql. Use parámetros sql en su lugar:
sql += " WHERE provider IN ({}) GROUP BY date ORDER BY date ASC".format(', '.join(['%s'] * len(providers)))
cursor.execute(sql, providers)
donde providers
es la lista original.
La idea es generar una consulta SQL con in
pruebe usando la sintaxis de parámetros SQL que coincida con el número de proveedores en su lista:WHERE provider in (%s, %s) ...
para una lista de dos proveedores. Sí, la sintaxis del parámetro sql de MySQLdb se hace eco de la sintaxis de formato de Python al estilo antiguo, pero no es lo mismo.