sqlite - 处理这个需要什么 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)每次都应该找到一个完全匹配的下拉列表,因为下拉列表是从同一个表/列中填充的。
另外,我可以对我的查询做些什么来防止注入攻击?
解决方案
由于该列包含数字和/或字符,因此您必须考虑其数据类型是TEXT
,尽管SQLite在数据类型方面并不严格,因为您可以将列的数据类型定义为INT
并在其中存储任何类型的文本。
你必须改变的是你选择数据的方式。
您必须?
像这样使用占位符(参数标记):
c.execute("SELECT prefix FROM " + tableType + " WHERE grade = ?", (tableGrade,))
wheretableType
是保存表格名称的变量,tableGrade
是保存要过滤的等级的字符串值。
推荐阅读
- reactjs - 看不到通过数据映射的结果
- c++ - 为什么我的静态成员函数会在其他地方抑制文件级静态变量的存在?
- javascript - 如何在 JQuery 显示/隐藏方法中停止重复 div?
- express - ExpressJS - 处理多个页面/分页
- java - 目标运行时 WebSphere Application Server 传统版 V9.0 未定义
- python - 获得最大收益的算法
- filesystems - 在 ubifs 卷上应用增量补丁
- html - 具有三种状态的复选框
- python - 如何仅在 tkinter 中更改所选文本的属性
- firebase - Firebase Cloud Functions:`convert` 因 ChildProcessError 而失败