Python / Mysql: отказывается от экранирования строки! - PullRequest
0 голосов
/ 07 июня 2011

У меня довольно длинный запрос, который мне нужно выполнить, и я использую подготовленные операторы для вставки значений в запрос. Насколько я знаю, это должно работать, но не работает!

Вот код:

    cursor = connection.cursor()
    rows = cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))
    rows = cursor.fetchall()
    rows = text_position(rows)

Если я вставляю простую кавычку, она ломается, и то же самое, если я вставляю любые неанглийские символы. Это работает с двойными кавычками, поскольку я завернул утверждение в них. Есть предложения?

1 Ответ

0 голосов
/ 07 июня 2011

Это общая методика отладки SQL (особенно при генерации на другом языке, например Python):

Остановите сервер mysql (при условии, что вы запускаете mysqld без регистрации):

sudo invoke-rc.d mysql stop

Запустите mysqld с включенным ведением журнала:

sudo mysqld --log=/tmp/myquery.log

Запустите ваш скрипт.

Найдите в /tmp/myquery.log команду SQL, которую MySQLdb отправил mysqld.

Это может дать вам достаточно подсказки, чтобы решить проблему, в противном случае, пожалуйста, опубликуйте полную команду SQL на Python

cursor.execute(r"""SELECT... %s.. %s.. %s...""",(val1,val2,val3,))

и соответствующий SQL, как видно из mysqld, в /tmp/myquery.log.

Как только вы закончите отладку, вы можете завершить запись в журнал mysqld и перезапустить его с помощью:

sudo invoke-rc.d mysql restart
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...