O fato de MySQLPython usar o marcador de formato de string padrão ("%") para marcadores de posição de variáveis em consultas pode tornar as coisas confusas.
O espaço reservado de consultas no db-api do python é para valores usado em
where
cláusulas e insert
e update
e são devidamente sanitizados/escapados/citados pelo db-api para evitar injeções de SQL etc. Eles não devem ser usados para nomes de tabelas ou campos. Então, o que você quer aqui é construir sua consulta usando formatação de string:
sql = 'SHOW TABLES FROM %s;' % (db_name[0],)
cursor.execute(sql)
Desde
db_name[0]
vem de uma fonte confiável, não há problema de segurança aqui.