【问题标题】:Passing parameters to LIKE SQL query将参数传递给 LIKE SQL 查询
【发布时间】:2021-09-27 14:27:52
【问题描述】:

我想使用来自查询参数的快速 API (Python) 将动态参数传递给 LIKE 查询。我尝试了很多方法,但我不知道我做错了什么。

我需要使用的查询是: SELECT Time, table_id, Text FROM tablename WHERE Text LIKE '%text%'

获取查询参数的python代码为:

def get_result(text : str):
   con = connection.connect()
   statement = 'SELECT Time, table_id, Text FROM tablename WHERE Text LIKE '%text%''

我将如何在此查询中传递动态文本参数,因为这会给出错误提示“TypeError:并非所有参数都在字符串格式化期间转换”

【问题讨论】:

标签: python sql fastapi


【解决方案1】:

您不能嵌套单引号。此外,在这里使用 f-string 进行字符串格式化会更清楚。试试:

statement = f"SELECT Time, table_id, Text FROM tablename WHERE Text LIKE '%{text}%'"

【讨论】:

  • NEVER 将值直接替换为这样的 SQL 字符串。 永远。使用参数化查询/绑定变量。
  • 它不起作用...如果我尝试打印它,它只是打印同一行而不将文本值放入其中。
  • @MatBailie 有点正确,但这取决于文本是否来自未经处理的输入。如果知道text不能注入任意SQL,那也没关系。另外,您的观点与提问者问题无关。
  • @Xandra 您可能缺少字符串前面的f 字符。
  • 这很重要。它隐藏错误、依赖隐式数据类型、中断查询计划缓存、更难维护等等。从不这样做。
【解决方案2】:

绝不 将值直接替换为这样的 SQL 字符串。 永远。使用参数化查询/绑定变量。

例如,根据您使用的驱动程序/库,您可能可以使用...

con = connection.connect()
cur = con.cursor()
cur.execute("SELECT Time, table_id, Text FROM tablename WHERE Text LIKE %s", ('%' + text + '%',))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-06-16
    • 2013-08-02
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-10
    相关资源
    最近更新 更多