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()))
这使您免去了确保正确引用动态元素的工作。
所以我有这段代码:
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()))
这使您免去了确保正确引用动态元素的工作。