Ввод MySQLdb, где строки содержат разделители строк - PullRequest
0 голосов
/ 16 февраля 2011

Я работаю над проектом на Python с MySQLdb.Как часть этого, я перемещаю информацию о пользователях, включая соленые пароли из одной системы, которая генерирует их, в новую, которая просто использует их.

Одинарные, двойные или тройные кавычки могут очерчивать начало и конец вашей строки.Тем не менее, одинарные и двойные кавычки являются частью нескольких хешей в 4.5k или около того пользователей, которых я переношу.Оба токена присутствуют примерно в 450 из этих солей.

Отредактированная версия кода выглядит следующим образом:

Django.execute ('INSERT INTO auth_user (password) VALUES ("' + user.password + '")')

Я попытался переключиться между типом кавычек, используемым в этом объекте курсора базы данных, каки когда обнаруживается либо тип кавычки, либо другой, но это все еще оставляет 150 или около того, которые содержат оба.

Какие обходные пути я могу использовать для этого?

Я пробовал тройные кавычки,но они вызывают ошибку программирования на объекте курсора.

Заранее спасибо

1 Ответ

2 голосов
/ 16 февраля 2011

Параметры запроса должны обеспечивать все необходимые экранирования, например:

cursor.execute('INSERT INTO auth_user (password) VALUES (%s)', [password])

Из документации Django по адресу: http://docs.djangoproject.com/en/dev/topics/db/sql/

Если вы не знакомы с DB-API Python, обратите внимание, что SQL оператор в cursor.execute () использует заполнители, "% s", а не добавление параметры непосредственно в SQL. Если Вы используете эту технику, лежащий в основе библиотека базы данных будет автоматически добавить кавычки и бежать к вашему параметр (ы) по мере необходимости. (Также обратите внимание что Джанго ожидает "% s" заполнитель, а не "?" заполнитель, который используется SQLite Python привязок. Это ради последовательность и здравомыслие.)

...