我正在构建一个查询字符串。在
query = "SELECT seqid, date, name, steamid, team, text, type, '%s' as triggerword, '%s' as weight FROM chatlogs WHERE date > '%s' AND text LIKE '%%%s%%' ORDER BY DATE" % (word, weight, self.setting['LAST_RUN_TIME'], word)
如果我打印字符串,它将正确返回:
^{pr2}$但是,它会失败,并出现一个TypeError异常: TypeError:格式字符串的参数不足
完整代码:
import database
mysqldb = database.Connection('localhost','mydb',user='myuser',password='mypass')
word = 'hunting_term'
weight = 0.01
setting = dict({'LAST_RUN_TIME':'2012-04-18 23:47:58.439124'})
query = "SELECT seqid, date, name, steamid, team, text, type, '%s' as triggerword, '%s' as weight FROM chatlogs WHERE date > '%s' AND text LIKE '%%%s%%' ORDER BY DATE" % (word, weight, setting['LAST_RUN_TIME'], word)
print query
for message in mysqldb.query(query): # This is the line it throws the exception on
print "A row"
数据库来自tornado包
这里的问题是,对MySQLdb的最终调用如下所示:
^{pr2}$db.cursor().execute()
的第一个参数应该是一个格式字符串,第二个参数应该是该格式字符串的替换项,您可以在MySQLdb docs中看到这一点。换句话说,它将执行以下代码:如您所见,这将导致相同的类型错误:
这意味着您希望MySQL看到的任何文本
%
在被db.cursor().execute()
看到时都必须是%%
,因此您应该能够通过将原始格式字符串更改为以下内容来解决此问题:但是,正确的方法是让MySQLdb为您执行替换,这会将您的代码更改为以下代码:
相关问题 更多 >
编程相关推荐