El hecho de que MySQLPython utilice el marcador de formato de cadena estándar ("%") para los marcadores de posición de las variables en las consultas puede hacer que las cosas sean confusas.
El marcador de posición de consultas en db-api de python es para valores usado en where
cláusulas y insert
y update
db-api para evitar inyecciones de SQL, etc. No se supone que se usen para nombres de tablas o campos.
Entonces, lo que quiere aquí es construir su consulta usando el formato de cadena:
sql = 'SHOW TABLES FROM %s;' % (db_name[0],)
cursor.execute(sql)
Desde db_name[0]
proviene de una fuente confiable, no hay problema de seguridad aquí.