我需要不时地动态更改表和变量,所以我写了一个python方法,如下所示:
selectQ ="""SELECT * FROM %s WHERE %s = %s;"""
self.db.execute(selectQ,(self.table,self.columnSpecName,idKey,))
return self.db.store_result()
但是,这会导致语法错误异常。我试着调试它,所以我打印了方法中的变量,并手动填充它们,结果成功了。所以我不确定我做错了什么?
是因为我想用一张桌子来代替吗?
此外,我如何调试mysqldb,使其将替换的查询打印为字符串?
DB API中的参数替换仅适用于值,而不适用于表或字段。您需要使用普通字符串替换这些:
selectQ ="""SELECT * FROM %s WHERE %s = %%s;""" % (self.table,self.columnSpecName)
self.db.execute(selectQ,(idKey,))
return self.db.store_result()
请注意,值占位符有一个双%
,这样初始字符串替换就不会影响它了。
以下是的完整工作示例
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()
您必须使用字符串替换来添加表和列名,驱动程序将只处理参数。
Ed:NM,Daniel回答得更快更完整
你是不是想写:
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)
这只是字符串格式的错误吗?
顺便问一下,你为什么要为这类工作编写显式SQL?更好地使用神奇的sqlalchemy进行python sql操作。。