处理此问题需要什么SQLite列数据类型?

问题描述 投票:0回答:1
 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)应该每次都找到完全匹配,因为下拉列表是从同一个表/列填充的。

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

column data

sqlite python-3.7
1个回答
1
投票

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

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

其中tableType是保存表名的变量,tableGrade是一个字符串值,包含您要过滤的等级。

© www.soinside.com 2019 - 2024. All rights reserved.