MySQL connector/python 使用 %s 有困难

MySQL connector/python difficulties using %s

我正在使用 MySQL 连接器 - Python driver 用于 MySQL 试图消除具有两个参数的函数中的重复代码:标题、作者. 我正在尝试动态修改查询以适应用户输入。虽然查询是合法的,但通配符 %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))

感谢所有愿意提供帮助的人。

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

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