Sqlite синтаксическая ошибка, хотя нет синтаксической ошибки.Помогите? - PullRequest
1 голос
/ 23 ноября 2011

Вот код, который я использую для обновления информации в моей базе данных sqlite:

self.c.execute("UPDATE proxydata (proxy, description) VALUES ('" + proxy + "', '" + description + "') WHERE proxy='" + proxy + "'")

Но я получаю эту ошибку:

sqlite3.OperationalError: near "(": syntax error

За свою жизнь я не могу найти ошибку. Обе переменные при исполнении являются правильно отформатированными строками.

EDIT:

Это отлично работает:

self.c.execute("UPDATE proxydata SET description='" + description + "' WHERE proxy='" + proxy + "'")

Вы можете закрыть тему.

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

Используйте параметризованный sql:

sql='UPDATE proxydata SET description = ? WHERE proxy = ?'
args=[decription,proxy]
self.c.execute(sql,args)

Это явно проще, так как вам не нужно самим приводить аргументы и, следовательно, меньше подвержены ошибкам.Это также безопаснее, поскольку параметризация sql позволяет sqlite3 защищать от внедрения sql.


Обратите внимание, что если proxy или description содержит только одну кавычку, то его необходимо экранировать.Ваше ручное построение оператора SQL неправильно экранирует кавычки этого типа.Это может быть причиной синтаксической ошибки, которую вы видите.


Редактировать: Как уже отмечали другие, реальная причина синтаксической ошибки заключается в том, что UPDATE ... VALUES ... WHERE не является допустимым (sqlite) SQL.Правильный синтаксис - UPDATE ... SET ... WHERE.

3 голосов
/ 23 ноября 2011

Нет такой вещи как синтаксическая ошибка без синтаксической ошибки. Попробуйте это:

self.c.execute("UPDATE proxydata SET proxy='" + proxy + "', description='" + description + "' WHERE proxy='" + proxy + "'")

Этот синтаксис описан здесь: http://www.sqlite.org/lang_update.html

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