【问题标题】:How to pass dynamic value in SQL LIKE?如何在 SQL LIKE 中传递动态值?
【发布时间】:2021-09-06 23:32:44
【问题描述】:

在下面的代码中,我想将动态值传递给类似 SQL 但正在接收。

代码

#Database

mydb = mysql.connector.connect(
    host="localhost",
    user="root",
    password="",
    database="deikho_app"
)

cursor = mydb.cursor(buffered=True)

`videoCatId`=1024

    if videoCatId:
        query = """select * from cb_video where active = 'yes' and status = 'Successful' and category LIKE '%' + %s + '%'"""
        cursor.execute(query, (videoCatId,))

代码说明

  • 首先创建与数据库的连接。
  • 然后为videoCatId分配一个值,用于运行if条件。
  • 在编写此查询并将其存储在query 变量中之后。
  • 然后执行查询。
  • 最后,从数据库中获取结果并存储在seriesResult变量中。

错误

ERROR:dramas-api:Exception on /papis/get-video [GET]
Traceback (most recent call last):
  File "C:\Users\Ideation\AppData\Roaming\Python\Python39\site-packages\flask\app.py", line 2070, in wsgi_app
    response = self.full_dispatch_request()
  File "C:\Users\Ideation\AppData\Roaming\Python\Python39\site-packages\flask\app.py", line 1515, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "C:\Users\Ideation\AppData\Roaming\Python\Python39\site-packages\flask\app.py", line 1513, in full_dispatch_request
    rv = self.dispatch_request()
  File "C:\Users\Ideation\AppData\Roaming\Python\Python39\site-packages\flask\app.py", line 1499, in dispatch_request
    return self.ensure_sync(self.view_functions[rule.endpoint])(**req.view_args)
  File "E:\dramas-api.py", line 61, in getVideo
    seriesResult = cursor.fetchall()
  File "C:\Users\Ideation\AppData\Roaming\Python\Python39\site-packages\mysql\connector\cursor.py", line 985, in fetchall
    raise errors.InterfaceError("No result set to fetch from.")
mysql.connector.errors.InterfaceError: No result set to fetch from.

【问题讨论】:

  • 什么是query变量值?
  • @Akina 这是写在它旁边的 SQL 语句。
  • 试试... LIKE CONCAT('%', %s, '%') ...
  • 感谢@Akina 成功了。

标签: python mysql sql python-3.x sql-like


【解决方案1】:

要参数化LIKE 表达式中的值,请将通配符合并到绑定值中,而不是在 SQL 准备语句中,您可以使用 Python 的 F 字符串:

query = """select * from cb_video 
           where active = 'yes' 
             and status = 'Successful' 
             and category LIKE %s
        """ 

cursor.execute(query, (f"%{videoCatId}%",))

【讨论】:

    猜你喜欢
    • 2018-06-16
    • 2020-05-04
    • 1970-01-01
    • 2018-07-15
    • 2013-04-09
    • 2021-10-12
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    相关资源
    最近更新 更多