Эта ошибка исходит от Python, а не SQL.
Как-то, имя age
равно строке '[email protected]'
. Итак, когда вы делаете int(age)
, вы получаете ValueError
:
>>> age = '[email protected]'
>>> int(age)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '[email protected]'
>>>
Вы должны найти, где вы случайно назначен age
на адрес электронной почты и исправить. Я не могу точно сказать, как вы это сделали, потому что код не размещен, но обычно это происходит из-за того, что вы неправильно распаковали итерацию. Что-то вроде:
name, email, date, age = ['Joe', 20, '11/12/2014', '[email protected]']
, которые должны быть:
name, age, date, email = ['Joe', 20, '11/12/2014', '[email protected]']
Кроме того, вы никогда не должны использовать строку форматирования для создания команд SQL. Вместо этого, передавать аргументы в виде кортежа и использовать ?
ссылаться на них:
cur.execute("insert into client values(?,?,?,?)", (name, email, date, age))
От docs:
Обычно ваши операции SQL нужно будет использовать значения из Python переменных. Вы не должны собирать свой запрос, используя строку Python , потому что это небезопасно; это делает вашу программу уязвимой для атаки SQL-инъекции (см. http://xkcd.com/327/ для юмористический пример того, что может пойти не так).
для int its% d not% s – Hackaholic
Я думаю, вы хотите '% d' для int. Но ваше сообщение об ошибке, похоже, указывает, что «возраст» на самом деле «[email protected]». – Madbreaks
Я думал, что слишком, но, похоже, не нашел, почему моя возрастная переменная является моей электронной почтой, так как я следил за повсюду, делая отпечатки, и каждый раз, когда она следует за переменной как строка – AbdulHamid