Il fatto che MySQLPython utilizzi l'indicatore di formato stringa standard ("%") per i segnaposto delle variabili nelle query può creare confusione.
Il segnaposto delle query in db-api di Python è per valori utilizzato in where
clausole e insert
e update
istruzioni e sono adeguatamente santificati/sfuggiti/citati da db-api per evitare iniezioni SQL, ecc. Non dovrebbero essere usati per nomi di tabelle o campi.
Quindi, quello che vuoi qui è costruire la tua query usando la formattazione delle stringhe:
sql = 'SHOW TABLES FROM %s;' % (db_name[0],)
cursor.execute(sql)
Dal momento che db_name[0]
proviene da una fonte attendibile, non ci sono problemi di sicurezza qui.