本文发自 http://www.binss.me/blog/python-mysqldb-raise-error-when-excute-sentence-with-percent-symbol/,转载请注明出处。

近在使用torndb执行sql语句时报错:

TypeError: not enough arguments for format string

而当我将sql语句中的%号去掉时,则正常执行,因此判断问题出在百分号

查看track back,torndb使用了MySQLdb,而问题应该出在MySQLdb解释sql语句时将百分号识别成通配符了。

因此需要将语句中的%号转义,我们知道,在python中%的转义为%%。

能不能偷懒?搜索MySQLdb文档,发现有escape_string函数,尝试调用后发现其不处理%号。

于是只能自己写了:

def escape_string(string):
    return string.replace("%", "%%")

然后使用该函数处理带%的语句,问题解决

2015-02-21 更新

这种情况只会出现在:用%来填充sql语句,然后用execute来执行的情况。

如:

sql = 'insert into items(name, url) values ("%s","%s")' % ("test",  "www.abc.com/?d%efg")
db_connection.execute(sql)

但是更推荐在execute时才传入参数:

sql = 'insert into items(id, url) values (%s,%s)'
db_connection.execute(sql, "test", "www.abc.com/?d%efg")

这样就不会出现百分号报错的问题。