Я пробовал всевозможные модули Python, и они либо избегают слишком большого, либо неправильного пути. Каким лучшим способом вам удалось избежать кавычек ( "," ) в Python?
Хороший способ избежать кавычек в строке запроса базы данных?
Ответ 1
Если это часть запроса к базе данных, вы сможете использовать параметризованный оператор SQL.
Помимо экранирования кавычек, он будет работать со всеми специальными символами и защитит вас от атак SQL-инъекций.
Ответ 2
Используйте json.dumps
.
>>> import json
>>> print json.dumps('a"bc')
"a\"bc"
Ответ 3
Легкий и стандартный способ избежать строк и конвертировать другие объекты в программную форму - это использовать функцию build в функции repr(). Он преобразует объект в представление, которое вам нужно будет ввести с помощью ручного кода.
например:.
s = "I'm happy I am \"here\" now"
print repr(s)
>> 'I\'m happy I am "here" now'
Нет странных хаков, он встроен, и он просто работает для большинства целей.
Ответ 4
Если вы используете psycopg2, у которого есть метод для экранирования строк: psycopg2.extensions.adapt()
Смотрите Явным образом цитирую строковое значение (Python DB API/Psycopg2) для полного ответа
Ответ 5
Ответ для старой темы, но лучший способ все еще отсутствует здесь.
Если вы используете psycopg2, он выполняет -method имеет buildin escaping.
cursor.execute("SELECT column FROM table WHERE column=%s AND column2=%s", (value1, value2))
Обратите внимание, что вы даете два аргумента для выполнения метода (string и tuple) вместо использования оператора Python% для изменения строки.
Ответ украден отсюда: psycopg2 эквивалент mysqldb.escape_string?
Ответ 6
Тройные одинарные кавычки удобно инкапсулируют одинарные кавычки, часто используемые в запросах SQL:
c.execute('''SELECT sval FROM sdat WHERE instime > NOW() - INTERVAL '1 days' ORDER BY instime ASC''')
Ответ 7
Тройные двойные кавычки лучше всего подходят для экранирования:
string = """This will span across 'single quotes', "double quotes", and literal EOLs all in the same string."""
Ответ 8
Для решения более общей проблемы у меня есть программа, в которой мне нужно было хранить любой набор символов в плоском файле, с разделителем табуляции. Очевидно, что наличие вкладок в "наборе" вызывало проблемы.
Вместо output_f.write(str) я использовал output_f.write(repr (str)), который решил мою проблему. Это медленнее читать, так как мне нужно eval() вводить, когда я его читаю, но в целом он делает код более чистым, потому что мне больше не нужно проверять случаи бахромы.
Ответ 9
Для моего случая использования я сохранял абзац в базе данных, и где-то в абзаце мог быть какой-то текст с одинарной цитатой (example: Charlie apple sauce was soggy)
Я нашел это работать лучше всего:
database_cursor.execute('''INSERT INTO books.collection (book_name, book_quoted_text) VALUES ('%s', "%s")''' % (book_name, page_text.strip()))
Вы заметите, что я использую ""
после переноса оператора INSERT в '''