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)应该每次都找到完全匹配,因为下拉列表是从同一个表/列填充的。
另外,我可以对我的查询做些什么来防止注射攻击呢?
由于该列包含数字和/或字符,因此您必须考虑其数据类型为TEXT
,尽管SQLite在数据类型方面并不严格,因为您可以将列的数据类型定义为INT
并在其中存储任何类型的文本。
您必须更改的是您选择数据的方式。
您必须使用占位符?
(参数标记),如下所示:
c.execute("SELECT prefix FROM " + tableType + " WHERE grade = ?", (tableGrade,))
其中tableType
是保存表名的变量,tableGrade
是一个字符串值,包含您要过滤的等级。