gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:36:12 24 4
gpt4 key购买 nike

这让我抓狂。我有一个非常基本的查询,它可以在没有清理语句的情况下工作,但会中断。我读过的所有内容都说要这样做。

query = "SELECT COL1 FROM A_TABLE %s"
queryUserInput = "WHERE COL1 = 'user input value'"
cursor.execute(query, (queryUserInput,))

我收到错误:

1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE ...

Top of the stack: C:..\env\lib\site-packages\mysql\connector\connection_cext.py in cmd_query

raw_as_string=raw_as_string)

Python 3.7Django 2.1.3

非常感谢任何建议。

最佳答案

参数化应该用于清理变量值,该变量值用于构成最终 SQL 的一部分 - 例如查询中的 7,例如 SELECT * FROM user WHERE ID = 7。您无法像现在这样对整个 SQL 部分进行参数化 - 事实上也没有必要这样做。

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

query = "SELECT COL1 FROM A_TABLE WHERE COL1 = %s"
queryUserInput = "user input value"
cursor.execute(query, (queryUserInput,))

以便它仅参数化实际的用户输入,而不参数化任何 SQL。

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

本文档(execute() 方法的)向您展示了一些正确用法的其他示例:https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html

关于python - 尝试在 Python/Django 中清理非常基本的 MySQL SELECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53727627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com