尝试在Python/Django中清理非常基本的MySQL SELECT

尝试在Python/Django中清理非常基本的MySQL SELECT,python,mysql,sql,django,parameterized-query,Python,Mysql,Sql,Django,Parameterized Query,这简直让我发疯。我有一个非常基本的查询,它在没有sanitization语句的情况下工作,但会与它中断。我读过的所有东西都说要这样做 query = "SELECT COL1 FROM A_TABLE %s" queryUserInput = "WHERE COL1 = 'user input value'" cursor.execute(query, (queryUserInput,)) 我收到错误消息: 1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手

这简直让我发疯。我有一个非常基本的查询,它在没有sanitization语句的情况下工作,但会与它中断。我读过的所有东西都说要这样做

query = "SELECT COL1 FROM A_TABLE %s"
queryUserInput = "WHERE COL1 = 'user input value'"
cursor.execute(query, (queryUserInput,))
我收到错误消息:

1064(42000):您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,了解正确的版本 在“”附近使用的语法,其中

堆栈顶部: C:..\env\lib\site packages\mysql\connector\connection\u cext.py in 命令查询

原始字符串=原始字符串)

Python 3.7 Django 2.1.3


非常感谢您的建议。

参数化应该用于存储一个变量值,该变量值用于构成完成的SQL的一部分-例如,查询中的
7
,例如
SELECT*FROM user,其中ID=7
。您不能以您目前的方式对SQL的整个部分进行参数化,事实上,不需要这样做

我不太了解Python,但从逻辑上讲,我认为您的代码应该是:

query = "SELECT COL1 FROM A_TABLE WHERE COL1 = %s"
queryUserInput = "user input value"
cursor.execute(query, (queryUserInput,))
为了使其仅参数化实际用户输入,而不是任何SQL

(您的原始代码将生成一个SQL字符串,类似于
SELECT COL1 FROM_TABLE',其中COL1=\'user input value\'
,这显然根本不是有效的SQL,因为_TABLE后面的所有内容都包含在字符串文字中。)

此文档(execute()方法)向您展示了其他一些正确用法的示例:

您可以尝试一下:

queryUserInput = "user input value"
cursor.execute("SELECT COL1 FROM A_TABLE WHERE COL1 = %s", [queryUserInput])
和django文件: