#python #python-3.x #database #sqlite #tkinter
#python #python-3.x #База данных #sqlite #tkinter
Вопрос:
Я разрабатываю графический интерфейс CRUD.
def crudRead():
myConex=sqlite3.connect("Users")
myCursor=myConex.cursor()
myCursor.execute("SELECT*FROM USER_DATA WHERE ID=" id_number.get())
theUser=myCursor.fetchall()
for user in theUser:
id_number.set(usuario[0])
username.set(usuario[1])
password.set(usuario[2])
biographyText.insert(1.0, usuario[3])
myConex.commit()
Ошибка:
myCursor.execute(«ВЫБЕРИТЕ * ИЗ USER_DATA, ГДЕ ID=» id_number.get())
Ошибка типа: можно только объединить str (не «int») в str
Как я могу выполнить поиск по идентификатору без этой ошибки? Я попытался установить id_number.get(), и он не возвращает никаких ошибок, но программа не работает должным образом, потому что столбец ID в базе данных имеет целочисленные значения.
Комментарии:
1. Смотрите Документацию о том, как указывать аргументы в SQL-запросе.
Ответ №1:
Используйте заполнитель:
myCursor.execute("SELECT * FROM USER_DATA WHERE ID=?", (id_number.get(),))
Комментарии:
1. Что также намного безопаснее, чем построение строки запроса.
Ответ №2:
Возможно, использование f строк может помочь.
myCursor.execute(f'SELECT*FROM USER_DATA WHERE ID={id_number.get()}')
Комментарии:
1. создание подобных запросов сопряжено с риском внедрения sql, и это один из основных способов взлома систем в наши дни.