sqlite3.OperationalError: no such column: sdg

CyberGyber

Новичок
Пользователь
Апр 5, 2020
3
2
3
Здравствуйте. У меня возникла проблема при написании программы с использованием sqlite3. Вот строчки кода, выдающие проблему:
Python:
y=input('введите фамилию объекта : ')
cur.execute("SELECT id FROM students WHERE sname == %s"%(y))
gf=cur.fetchall()
for row in gf:
d.append(row)
print(row)
выдаёт:
Python:
cur.execute("SELECT id FROM students WHERE sname == %s"%(y))
sqlite3.OperationalError: no such column: sdg
при вводе фамилии sdg.
Вот таблица students (id, sname, name, height, weight):
(1, 'sdg', 'sdgsd', 124, 23)
(2, 'sdg', 'saf', 214, 324)
(3, 'sdgh', 'dsg', 324, 45)
(4, '', '', 124, 123)
как можно решить эту проблему?
сначала я подумал что возможно неправильно использую синтаксис, но при :
Python:
cur.execute("SELECT id FROM students WHERE height > 210")
мне исправно выдают id студентов с ростом больше 210 :
Код:
введите фамилию объекта :
(2,)
(3,)
В чем тогда ошибка? И кстати ещё одна проблема заключается в том, что мне выдают id в таком виде:
(2,)
(3,)
а не в integer. Мне он как раз-таки нужен в интовых значениях. Можно ли их как-то конвертировать? Заранее благодарю.
 
  • Мне нравится
Реакции: Student

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
(2,) - это кортеж или tuple. Вот пример запроса и конвертации:
Python:
conn = sqlite3.connect('students.db')
    c = conn.cursor()
    y = input('введите фамилию объекта : ')
    c.execute("SELECT id FROM students WHERE sname =?", (y,))
    gf = c.fetchall()
    for s in gf:
        print(int(s[0]))
 
  • Мне нравится
Реакции: CyberGyber и Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
Python:
y=input('введите фамилию объекта : ')
cur.execute("SELECT id FROM students WHERE sname == %s"%(y))

В SQL нет ==, для проверки совпадения достаточно один =.
 

CyberGyber

Новичок
Пользователь
Апр 5, 2020
3
2
3
В SQL нет ==, для проверки совпадения достаточно один =.
пробовал:
Python:
cur.execute("SELECT id FROM students WHERE sname = %s"%(y))
sqlite3.OperationalError: no such column: sdg
результат одинаковый.
UPD:
попробовал:
Python:
cur.execute("SELECT id FROM students WHERE sname = ?",(y,))
сработало:
Python:
введите фамилию объекта : sdg
1
2
почему?
 
Последнее редактирование:

CyberGyber

Новичок
Пользователь
Апр 5, 2020
3
2
3
(2,) - это кортеж или tuple. Вот пример запроса и конвертации:
Python:
conn = sqlite3.connect('students.db')
    c = conn.cursor()
    y = input('введите фамилию объекта : ')
    c.execute("SELECT id FROM students WHERE sname =?", (y,))
    gf = c.fetchall()
    for s in gf:
        print(int(s[0]))
большое спасибо
 
  • Мне нравится
Реакции: Student

Student

throw exception
Команда форума
Администратор
Апр 2, 2020
195
103
43
Москва
большое спасибо

Не забудьте выбрать ответ stud_55 как самый лучший (иконка кубка).
 

Форум IT Специалистов