Det faktum att MySQLPython använder standardsträngformatmarkören ("%") för variabelplatshållare i frågor kan göra saker förvirrande.
Frågornas platshållare i pythons db-api är för värden används i where
satser och insert
och update
satser, och är korrekt santiserade / escaped / citerade av db-api för att undvika SQL-injektioner etc. De är inte tänkta att användas för tabell- eller fältnamn.
Så vad du vill här är att bygga din fråga med strängformatering:
sql = 'SHOW TABLES FROM %s;' % (db_name[0],)
cursor.execute(sql)
Sedan db_name[0]
kommer från en pålitlig källa, det finns inga säkerhetsproblem här.