Python y MySQLdb: sustitución de la tabla que produce un error de syntax

Necesito cambiar dinámicamente las tablas y las variables de vez en cuando, así que escribí un método de python como este:

selectQ ="""SELECT * FROM %s WHERE %s = %s;""" self.db.execute(selectQ,(self.table,self.columnSpecName,idKey,)) return self.db.store_result() 

Sin embargo, esto resulta en una excepción de error de syntax. Intenté depurarlo, así que imprimí las variables en el método y las llené manualmente, y eso funcionó. ¿Entonces no estoy seguro de lo que estoy haciendo mal?

¿Es porque trato de usar un sustituto para una mesa?

También, ¿cómo depuro mysqldb para que imprima la consulta sustituida como una cadena?

La sustitución de parámetros en la API de DB es solo para valores, no tablas o campos. Tendrá que usar la sustitución de cadena normal para aquellos:

 selectQ ="""SELECT * FROM %s WHERE %s = %%s;""" % (self.table,self.columnSpecName) self.db.execute(selectQ,(idKey,)) return self.db.store_result() 

Tenga en cuenta que el marcador de posición de valor tiene un doble % , esto es para que quede solo por la sustitución de la cadena inicial.

Aquí hay un ejemplo completo de trabajo.

 def rtnwkpr(tick, table, col): import MySQLdb as mdb tickwild = tick + '%' try: con = mdb.connect(host, user, password, db); cur = con.cursor() selectq = "SELECT price FROM %s WHERE %s LIKE %%s;" % (table, col) cur.execute(selectq,(tickwild)) return cur.fetchall() 

Tendrá que usar la sustitución de cadenas para agregar los nombres de tabla y columna, el controlador solo manejará los parámetros.

Ed: NM, Daniel respondió más rápido y más completamente.

¿Querías escribir?

 selectQ = """SELECT * FROM %s WHERE %s = %s;""" % (self.table,self.columnSpecName,idKey) #maybe the idkey should be self.idkey? don't know the rest of the code self.db.execute(selectQ) 

¿Y esto es solo un error con el formato de cadena?

¿Por qué escribes SQL explícito para este tipo de trabajo? mejor uso de sqlicki mágico para la manipulación de python sql …