Какой тип данных столбца SQLite требуется для обработки этого?

#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 — строковое значение, содержащее оценку, по которой вы хотите отфильтровать.