Запретить Python выполнять интерполяцию (замену) строк с% s внутри SQL-блока sqlite3 - PullRequest
0 голосов
/ 22 марта 2012

Итак, вот строка с запросом SQL. Как использовать strftime ('% s', 'now') без python, пытающегося заменить% s на строку ... это невероятно раздражает.

Спасибо

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

1 Ответ

1 голос
/ 22 марта 2012

Вы можете просто уйти от %, используя два к концу, поэтому поместите %%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')
...