#sqlite #python-3.7
#sqlite #python-3.7
Вопрос:
def material_code(self):
tableType = self.comboBox.currentText()
tableGrade = self.comboBox_2.currentText()
tableType = tableType.lower()
c.execute('SELECT prefix FROM ' tableType ' WHERE grade = ' tableGrade)
prefix_code = c.fetchone()
print(prefix_code[0])
conn.commit()
Кажется, я получаю распространенную ошибку…
нераспознанный токен sqlite3:
Эта ошибка возникает, когда возвращаемое значение представляет собой комбинацию numeric / char, а в поле присутствуют другие специальные символы.
Иногда это срабатывает, если поле содержит только цифры или символы, но не комбинацию.
Выпадающий список (tableGrade), который я ВЫБИРАЮ, должен находить точное соответствие каждый раз, поскольку выпадающий список заполняется из одной и той же таблицы / столбца.
Также, пожалуйста, что я могу сделать с моим запросом для защиты от инъекционных атак?
Ответ №1:
Поскольку столбец содержит цифры и / или символы, вы должны учитывать, что его типом данных является TEXT
, хотя SQLite не является строгим, когда дело доходит до типов данных, поскольку вы можете определить тип данных столбца как INT
и хранить в нем любой текст.
Что вы должны изменить, так это способ выбора данных.
Вы должны использовать заполнители ?
(маркеры параметров), подобные этому:
c.execute("SELECT prefix FROM " tableType " WHERE grade = ?", (tableGrade,))
где tableType
— переменная, содержащая имя вашей таблицы, и tableGrade
— строковое значение, содержащее оценку, по которой вы хотите отфильтровать.