使用 %s 的 MySQL 连接器/python 困难

Posted

技术标签:

【中文标题】使用 %s 的 MySQL 连接器/python 困难【英文标题】:MySQL connector/python difficulties using %s 【发布时间】:2020-09-21 21:30:19 【问题描述】:

我正在使用 mysql 连接器 - MySQL 的 Python 驱动程序 试图消除具有两个参数的函数中的重复代码:标题、作者。 我正在尝试动态修改查询以适应用户输入。尽管该查询是合法的,但显然通配符 %s 无法使用它。

有人可以指出我缺少的可能修复,或者不需要为所有四种可能的变体创建 4 个不同查询的替代解决方案:两者都等于“ALL”,不等于或 XOR。

我尝试实现的简化代码:

    if title == 'ALL':
        title = 'ANY (SELECT title FROM book)'
    if author == 'ALL':
        author = 'ANY (SELECT author FROM book)'
    cursor.execute("SELECT * FROM book where title = %s and author = %s",(title, author))

感谢任何愿意提供帮助的人。

【问题讨论】:

【参考方案1】:

您不能将一段 SQL 作为参数传递。此机制仅用于传递文字值。我会推荐布尔逻辑:

sql = "select * from book where (%s = 'ALL' or title = %s) and (%s = 'ALL' or author = %s)"
cursor.execute(sql, (title, title, author, author))

【讨论】:

事实上,存在参数专门是为了防止人们将 SQL 注入到您的查询中。 非常感谢伙计!我不知道:“ select * from table_name where (Truth statement)”会导致这种情况。希望我能支持该评论,但我没有足够的声誉。

以上是关于使用 %s 的 MySQL 连接器/python 困难的主要内容,如果未能解决你的问题,请参考以下文章

mysql/python 连接器在处理空值时使用参数和字典死机

Python连接MySQL

LIKE 子句。在 python 连接器中 mysql

pycharm中mysql插入问题

(13)python连接msql

Python连接Mysql数据库