#python #mysql #mysql-python
#python #mysql #mysql-python
Вопрос:
вот код
sql="SELECT node_id FROM %s WHERE domain='%s';"%(config.nodetable,url)
r=getBySql(sql)
моя проблема заключается в попытке сохранить данные в базе данных mysql, поэтому этот код должен был выполняться повторно, примерно более ста тысяч раз. и вначале все шло хорошо, пока несколько раз интерпретатор не возвращал ошибку:
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 35,
in defaulterrorhandler
raise errorclass, errorvalue
OperationalError: (1054, "Unknown column 'h' in 'where clause'")
но я нахожу, что строка sql, которая должна быть выполнена, полностью в порядке, поскольку:
SELECT node_id FROM testnodewww WHERE domain='http://service.qq.com';
Я совершенно не имею об этом понятия. почему сначала все работало хорошо? и почему ошибка сообщает о «неизвестном столбце ‘h'»?? мой код вообще не имеет ничего общего со столбцом h…
Комментарии:
1. У вас уязвимость при внедрении SQL.
Ответ №1:
MySQLdb преобразует ваш параметр в SQL-литерал, не используйте одинарные кавычки в вашей строке sql или точку с запятой в конце и не используйте интерполяцию строк:
sql = "SELECT node_id FROM %s WHERE domain=%s" % (config.nodetable, url)
Сделайте это вместо:
cursor.execute("SELECT node_id FROM %s WHERE domain=%s", (config.nodetable, url))
Комментарии:
1. нет, функция execute автоматически добавит запросы в config.nodetable, что вызовет синтаксическую ошибку
2. Тогда измените свою функцию execute, не пытайтесь избежать чего-либо самостоятельно, вы все испортите. Это почти наверняка ваша проблема здесь.
3. спасибо и могу я спросить, в чем причина этой проблемы и почему сообщение об ошибке содержит столбец ‘h’, поступающий неизвестно откуда?
4. Невозможно узнать наверняка, не увидев весь ваш код, вероятно, это было связано с тем, как вы пытались создать SQL-литералы вручную