防止python在sqlite3 SQL块中使用%s执行字符串插值(替换)

时间:2012-03-21 21:36:21

标签: python sqlite escaping string-interpolation

所以这里是SQL查询的一行。我怎么使用strftime('%s','now')而不用python试图用字符串替换%s ...这非常令人讨厌。

由于

DBQuery.query('INSERT INTO test (Date, Entry) VALUES (strftime(''%ss'', ''now''), "%s")' %('%', cherrypy.request.params['username']), 'INSERT')

1 个答案:

答案 0 :(得分:1)

您可以通过使用两个背靠背来逃避%,因此将%%s放在您希望它成为%s的字符串中。例如:

>>> print '''strftime('%%s', 'now'), "%s"''' % "some value"
strftime('%s', 'now'), "some value"

另外,我不认为你背对背的单引号正在做你认为的那样。这不会在字符串中留下单引号,它只会将两个字符串连接在一起,例如:

>>> 'aaa''bbb'
'aaabbb'

相反,你应该使用三引号字符串或转义单引号。最终结果可能如下所示:

DBQuery.query('''INSERT INTO test (Date, Entry) VALUES (strftime('%%s', 'now'), "%s")''' % cherrypy.request.params['username'], 'INSERT')