Проблема форматирования строк в Python 2.5! - PullRequest
0 голосов
/ 13 сентября 2010

Я пытаюсь использовать форматирование строки Python 2.5, но я столкнулся с проблемой в следующем примере:

values = {
          'url': 'http://blabla.com',
          'link' : 'http://blabla.com',
          'username' : 'user',
          'spot'    : 0,
          'views'    : 10,
          'date'    : 3232312,
          'private' : 1, 

          }

query = """insert into hyves.Image (URL, StaticLink , HostUsername, SpotCount, ViewCount, UploadDate) values ('%(url)','%(link)','%(username)',%(spot),%(views),%(date), %(private) )""" % values

print query

Это дает мне следующую ошибку: ValueError: неподдерживаемый символ формата '' '(0x27) в индексе 106. Кто-нибудь может мне помочь?

Ответы [ 3 ]

9 голосов
/ 13 сентября 2010

Никогда не используйте форматирование строк для составления SQL-запросов, как это!Используйте модуль базы данных для интерполяции - он сделает это с правильным экранированием, чтобы этого не случилось с вами: http://xkcd.com/327/

В случае, если вы хотите использовать это форматирование для других вещей, чем sql, используйте %(foo)s (или d, или любой другой формат).

3 голосов
/ 13 сентября 2010

Необходимо указать явное преобразование флаги:

query = """insert into hyves.Image (URL, StaticLink , HostUsername, SpotCount, ViewCount, UploadDate) values (%(url)s,%(link)s,%(username)s,%(spot)i,%(views)i,%(date)i, %(private)i )""" % values
3 голосов
/ 13 сентября 2010

Вам не хватает символов формата, т. Е .:

"INSERT INTO ... %(url)s, ..." % values

... если вы хотите отформатировать URL как строку.

...