Какой тип данных столбца SQLite требуется для этого? - PullRequest
0 голосов
/ 29 марта 2019
 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 нераспознанный токен:

Эта ошибка возникает, когда возвращаемое значение представляет собой комбинацию цифр / символов и в поле присутствуют другие специальные символы.

Иногда это работает, если поле содержит только цифры или символы, но не комбинацию.

Раскрывающийся список (tableGrade), с которым я ВЫБИРАЮ, должен находить точное совпадение каждый раз, поскольку раскрывающийся список заполняется из одной и той же таблицы / столбца.

Кроме того, что я могу сделать с моим запросом для защиты от инъекционных атак, пожалуйста?

column data

1 Ответ

1 голос
/ 29 марта 2019

Поскольку в столбце содержатся цифры и / или символы, необходимо учитывать, что его тип данных равен TEXT, хотя SQLite не является строгим в отношении типов данных, поскольку вы можете определить тип данных столбца.как INT и хранить в нем любой текст.То, что вы должны изменить, это способ выбора данных.Вы должны использовать заполнители ? (маркеры параметров) следующим образом:

c.execute("SELECT prefix FROM " + tableType + " WHERE grade = ?", (tableGrade,))

, где tableType - это переменная, содержащая имя вашей таблицы, а tableGrade - это строковое значение, содержащее оценку, по которой выхочу отфильтровать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...