2017-01-26 12 views
1

Я использую Python/Flask и пытаюсь выполнить запрос к моей БД.SQL Выберите, где не работает

conn = sqlite3.connect('./flaskdb.db') 
cur = conn.cursor() 
cur.execute('SELECT email FROM users WHERE email=\'%s\'', "name") 

У меня 2 колонки, email, password и значение name, password в качестве одной из строк/записей.

Почему это не работает? Я получаю сообщение об ошибке:

sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 0, and there are 7 supplied. 
+0

Просьба представить полный пример, чтобы мы могли видеть, по крайней мере, весь оператор python, вызывающий ошибку. Как всегда, [минимальный, полный и проверяемый пример] (http://stackoverflow.com/help/mcve) облегчает нам помощь. – 2ps

+0

Пожалуйста, покажите полный код. Как правило, с подготовленными заявлениями вам не нужно беспокоиться об использовании одинарных кавычек вокруг параметров, потому что API позаботится об этом для вас. –

+0

@ 2ps, обновленный код – garoo

ответ

0

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

conn = sqlite3.connect('./flaskdb.db') 
cur = conn.cursor() 
name = '[email protected]' 
cur.execute('SELECT email FROM users WHERE email=?', (name,)) 

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

+0

Спасибо! Это% s не допускается, хотя ожидается ожидание выражения – garoo

+0

% s дает ошибку типа – garoo

+0

Извините, я имел в виду синтаксическую ошибку и sqlite3.Operationerror – garoo

0

У меня есть решение:

cur.execute('SELECT password FROM users WHERE email=(?)', (email,)) 

вам это нужно как кортеж и (?) в качестве заполнителя.

 Смежные вопросы

  • Нет связанных вопросов^_^