Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Не понятна причина ошибки Python sqlite3

Арсений Виниченко Ученик (111), на голосовании 1 неделю назад
Traceback (most recent call last):
File "c:\Users\user\Desktop\new folder\main.py", line 58, in <module>
main_func()
File "c:\Users\user\Desktop\new folder\main.py", line 53, in main_func
main.enters(name, pasword)
File "c:\Users\user\Desktop\new folder\main.py", line 38, in enters
cur.execute('SELECT * FROM Users WHERE username = ? AND pasword = ?', name, pasword)
TypeError: execute expected at most 2 arguments, got 3

место происхождения

         def enters(name, pasword): 
with sq.connect("main.db") as con:
cur = con.cursor()

cur.execute('SELECT * FROM Users WHERE username = ? AND pasword = ?', name, pasword)
result = cur.fetchall()
print(result)
Голосование за лучший ответ
GGG Просветленный (33206) 1 месяц назад
Ошибка в твоем коде связана с тем, что метод execute в модуле sqlite3 ожидает два аргумента: SQL-запрос и кортеж параметров для замены ? в запросе. В твоем случае ты передаешь три аргумента, что вызывает TypeError. Чтобы исправить это, нужно объединить name и pasword в кортеж и передать его как второй аргумент. Правильный вариант будет выглядеть так:
 cur.execute('SELECT * FROM Users WHERE username = ? AND pasword = ?', (name, pasword)) 
Здесь (name, pasword) — это кортеж, который передается как один аргумент. Ошибка возникла из-за того, что Python воспринял name и pasword как два отдельных аргумента, что не соответствует ожиданиям метода execute. Проверь свой код на такие моменты, когда работаешь с параметризованными запросами, чтобы избежать подобных ошибок.
Рустам Абдрашитов Мыслитель (8566) 1 месяц назад
Ошибка возникает из-за неправильного количества аргументов, передаваемых в метод execute(). Ваша строка:
 cur.execute('SELECT * FROM Users WHERE username = ? AND pasword = ?', name, pasword) 
передает три аргумента вместо двух. Чтобы исправить это, объедините name и pasword в кортеж:
 cur.execute('SELECT * FROM Users WHERE username = ? AND pasword = ?', (name, pasword)) 
Теперь код должен работать корректно.
Похожие вопросы