2014-11-15 2 views
0

Я пытаюсь выбрать запись из моего MySQL db, проблема в том, что он возвращается с этой ошибкой, которую я не понимаю, я искал в Интернете решение, и есть много подобных случаев, но никто не относится к этому конкретному.Python - MySQL - Неизвестные столбцы http: // www ....................... 'в' списке полей '

Выражение я пытаюсь выполнить следующий:

result = cursor.execute("""select * from urls where domain = '%s';"""%(found_url,)) 

это в предложении попробовать и это всегда идет прямо к кроме дает мне эту ошибку:

OperationalError(1054, "Unknown column 'http://..................' in 'field list'") 

(я пропустил URL-адрес, точки выполняют роль заполнителей)

после нескольких циклов, находясь в цикле, он перестает давать мне эту ошибку и изменяет ее на это:

ProgrammingError(2014, "Commands out of sync; you can't run this command now") 

любая идея? я схожу с ума от этого.

+0

'импорт MySQLdb' >>>' дб = MySQLdb.connect (host = "localhost", user = "root", passwd = "pass", db = "name") ' >>>' cursor = db.cursor() ' >>>' cursor.execute ("" "select * from table_name где some_column = '% s';" ""% ('kfkfk',)) ' ' 0L' – madzohan

+0

странно, я протестировал это на своем env и не получил ошибок – madzohan

+0

показать еще код .. . – madzohan

ответ

0

Использовать запрос parameters вместо того, как вы это делаете со строчной интерполяцией. Защищает вас от SQL Injectionattacks.

cursor.execute("""select * from urls where domain = %s""", (found_url,)) 

Обратите внимание на различия здесь:

  • %s не котируется, как библиотека MySQLdb будет обрабатывать это автоматически
  • Вы не используете интерполяцию строки (не % после строки, чтобы заменить вашу заполнители). Вместо этого вы передаете кортеж в качестве второго аргумента функции execute.
  • Поскольку вы используете только один держатель место, и вы все еще должны пройти кортеж, есть запятая, чтобы указать, что это кортеж (found_url,)