Python和MySQLdb:表的替换导致语法错误

时间:2012-02-22 11:56:49

标签: python mysql-python

我需要不时地动态更改表和变量,所以我写了一个这样的python方法:

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

然而,这会导致语法错误异常。我尝试调试它,所以我在方法中打印变量并手动填充它们,这很有效。所以我不确定我做错了什么?

是因为我尝试使用表的替代品吗?

另外我如何调试mysqldb,以便将替换查询打印为字符串?

4 个答案:

答案 0 :(得分:11)

DB API中的参数替换仅适用于值 - 而不是表或字段。你需要使用普通的字符串替换:

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

请注意,值占位符有一个双% - 这样就可以通过初始字符串替换保留它。

答案 1 :(得分:1)

这是一个完整的工作示例

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()           

答案 2 :(得分:0)

你必须使用字符串替换来添加表名和列名,驱动程序只会处理参数。

Ed:NM,Daniel回答得更快更完整

答案 3 :(得分:-3)

你的意思是写:

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操作..