¿Cómo insertarlo en una tabla mysql usando mysaldb, donde el nombre de la tabla está en una variable de python?

Estoy usando python-mysql db api para insertar algunos valores en una tabla donde el nombre de la tabla está en una variable de python. Así que escribí el siguiente código

DB_CURSOR.execute("""INSERT INTO %s (name,created_by,state,description,docs,admin_email,date_created) VALUES(%s,%s,%s,%s,%s,%s,%s)""", (hosts_table, hostname, created_by, state, description, docroot, admin_email, date_created)) 

Como ves, el nombre de la tabla está en la variable hosts_table. El problema es que mysqldb cita el nombre de la tabla y me aparece un error mysql. Funciona bien cuando literalmente uso el nombre de la tabla. ¿Cómo puedo evitar esto?

 DB_CURSOR.execute("""INSERT INTO %s (name,created_by,state,description,docs,admin_email,date_created) VALUES(%%s,%%s,%%s,%%s,%%s,%%s,%%s)""" % hosts_table, (hostname, created_by, state, description, docroot, admin_email, date_created)) 

Tenga en cuenta que la variable hosts_table es un solo signo%, y todas las demás variables son dos %%, por lo que se ignoran en la interpolación de la cadena Python inicial y luego cambian a un solo% para la parte mysqldb.

Intenta esto en el indicador de Python para ver a qué me refiero:

 >>> '%%s %s' % 'x' '%sx' 

Intenta algo como eso:

 DB_CURSOR.execute("""INSERT INTO %s (name,created_by,state,description,docs,admin_email,date_created) VALUES(%s,%s,%s,%s,%s,%s,%s)""" % (hosts_table), (hostname, created_by, state, description, docroot, admin_email, date_created)) 

No estoy seguro de que funcione pero podría 🙂

MySQLdb no se preocupa un poco por los nombres de sus variables. Si tiene un problema con el nombre de la tabla, intente asignar hosts_table al nombre de la tabla y ver si funciona.

hosts_table = 'hosts_table'

O simplemente print y vea qué nombre de tabla está usando:

print hosts_table