Reputation: 6891
I need to dynamically change tables and variables from time to time, so I wrote a python method like this:
selectQ ="""SELECT * FROM %s WHERE %s = %s;"""
self.db.execute(selectQ,(self.table,self.columnSpecName,idKey,))
return self.db.store_result()
However this results in a syntax error exception. I tried debugging it so I printed the variables in the method and filled them in manually, and that worked. So I am not sure what I am doing wrong ?
Is it because I try to use a substitute for a table ?
Also how do I debug mysqldb so it prints the substituted query as a string ?
Upvotes: 7
Views: 3172
Reputation: 19
Here is a full working example
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()
Upvotes: 1
Reputation: 2915
You'll have to use string substitution to add the table and column names, the driver will only handle parameters.
Ed: NM, Daniel answered faster and more completely
Upvotes: 0
Reputation: 599590
Parameter substitution in the DB API is only for values - not tables or fields. You'll need to use normal string substitution for those:
selectQ ="""SELECT * FROM %s WHERE %s = %%s;""" % (self.table,self.columnSpecName)
self.db.execute(selectQ,(idKey,))
return self.db.store_result()
Note that the value placeholder has a double %
- this is so that it's left alone by the initial string substitution.
Upvotes: 12
Reputation: 12068
Did you mean to write:
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)
and this is just a mistake with string formatting?
Btw why do you write explicit SQL for this kind of work? better use magical sqlalchemy for python sql manipulation..
Upvotes: -3