使用 %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 困难的主要内容,如果未能解决你的问题,请参考以下文章