首页 > 解决方案 > 处理这个需要什么 SQLite 列数据类型?

问题描述

 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)每次都应该找到一个完全匹配的下拉列表,因为下拉列表是从同一个表/列中填充的。

另外,我可以对我的查询做些什么来防止注入攻击?

列数据

标签: sqlitepython-3.7

解决方案


由于该列包含数字和/或字符,因此您必须考虑其数据类型是TEXT,尽管SQLite在数据类型方面并不严格,因为您可以将列的数据类型定义为INT并在其中存储任何类型的文本。
你必须改变的是你选择数据的方式。
您必须?像这样使用占位符(参数标记):

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

wheretableType是保存表格名称的变量,tableGrade是保存要过滤的等级的字符串值。


推荐阅读