Форматирование строки Python необходимо заключать в кавычки спецификатора формата, но строка содержит кавычки - PullRequest
0 голосов
/ 09 октября 2018

У меня проблемы с попыткой правильно отформатировать строку запроса для Cassandra.У меня есть этот запрос, который я задаю

session.execute("UPDATE query3 SET movietitle = '{:s}' WHERE itemid = {:d} and userid in (1, 2000)".format(cols[1], id))

Проблема в том, что movietitle может иметь форму Toy Story (1995) или Mr. Holland's Opus (1995), поэтому без кавычек круглые скобки могут вызвать проблемы с запросом.Однако одинарные кавычки также вызывают проблемы, поскольку названия фильмов могут содержать кавычки в названии.Есть ли аккуратный способ структурирования этого запроса?

1 Ответ

0 голосов
/ 10 октября 2018

Не используйте встроенную функцию Python format для установки значений в строке запроса.Это открывает ваше приложение для целого класса ошибок и проблем безопасности, известных как атаки с использованием SQL / CQL.

Вместо этого драйвер DataStax Python поддерживает параметризованные запросы.

Session.execute(...) принимает параметр parameters, который позволяет указать последовательность или dict значений для замены.

Например, ваш запрос должен выглядеть следующим образом:

session.execute("UPDATE query3 SET movietitle = %s WHERE itemid = %s and userid in (1, 2000)", parameters=(cols[1], id))

Также рассмотрите возможность использования подготовленных операторов , если вам нужно выполнить один и тот же запрос несколько раз.Они имеют преимущество в производительности.

...