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))
我正在使用 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))