SQL 代码未正确执行

SQL Code not executing properly

所以我有这段代码:

sql1 = "SELECT * FROM CustomerTable WHERE " + variable.get() + " = " + Queryby.get()
print(sql1)

当我运行这段代码时,print输出这个:

SELECT * FROM CustomerTable WHERE Title = Mr

这表明代码在执行时应该有效。但是,当我将 print(sql1) 更改为 cursor.execute(sql1) 时,它会输出以下错误消息:

sqlite3.OperationalError: no such column: Mr

这让我很困惑,因为 Mr 的位置表明它是正在搜索的内容,而不是该列的名称。有什么建议吗?

您需要像 'Mr' 这样用一个撇号将 Mr 括起来。这样,SQL 将其识别为字符串而不是列。

基本上,你的台词应该是这样的:

sql1 = "SELECT * FROM CustomerTable WHERE " + variable.get() + " = '" + Queryby.get() + "'"

如果您希望避免所有加号,您也可以采用不同的格式:

sql1 = "SELECT * FROM CustomerTable WHERE {} = '{}'".format(variable.get(), Queryby.get())

请记住,如果输入是从外部提供的,您自己格式化字符串可能会导致 SQL 注入攻击。请参阅 documentation 关于使用 ? 格式化的内容。

在 "Mr" 周围添加引号。喜欢:

sql1 = "SELECT * FROM CustomerTable WHERE " + variable.get() + " = '" + Queryby.get() + "'"

像这样动态构建查询会使您在最终执行时面临注入攻击。相反,使用参数化查询:

# This is a little extreme...
sql1 = "SELECT * FROM CustomerTable WHERE ? = ?"
cursor.execute(sql1, (variable.get(), Queryby.get()))

这使您免去了确保正确引用动态元素的工作。