gpt4 book ai didi

使用 mySQL 原始数据库查询的 Python 字符格式给我带来了问题

转载 作者:行者123 更新时间:2023-11-29 01:59:25 26 4
gpt4 key购买 nike

我在尝试在我的网络应用程序上安装搜索功能时遇到问题。问题在于以下代码。我尝试了以下两个查询,但 python 给了我一个错误,我将在下面列出:

def searchBox(user_id, searchparams):

try:
cursor = connection.cursor()

if cursor:
sql = "SELECT * FROM db_email WHERE user_id = %d AND deleted = 0 AND subject LIKE '%%%s%%';"
cursor.execute(sql % (user_id, searchparams)

我也试过:

try:
cursor = connection.cursor()

if cursor:
sql = "SELECT * FROM db_email WHERE user_id = %d AND deleted = 0 AND subject LIKE " + "'%" + searchparams + "%';"
cursor.execute(sql % (user_id))

两者都为我返回了这个错误:

TypeError: not enough arguments for format string

这是我唯一遇到过问题的原始查询,它与我需要调用 LIKE 的方式有关。我可以编写一个存储过程来绕过 python,但我觉得我在做一些愚蠢的事情并且忽略了一个问题。任何帮助将不胜感激


谢谢。我认为部分问题出在我的 LIKE 查询上,我需要用百分号括起我的搜索参数,而下面的答案并不像这样工作 -

subject LIKE '%somestringimlookingfor%' 

使用上面的代码,它似乎出来了'test'%''。有什么想法吗?

最佳答案

不要对 SQL 查询使用字符串插值,这是完全不安全的。

改为使用查询参数:

sql = """SELECT 
*
FROM
db_email
WHERE
user_id = %s AND
deleted = 0 AND
subject LIKE '%%%s%%'"""
cursor.execute(sql, (user_id, searchparams))

百分号应使用 % 进行转义。

更新:

略有不同的选项:

sql = """SELECT 
*
FROM
db_email
WHERE
user_id = %s AND
deleted = 0 AND
subject LIKE %s"""
cursor.execute(sql, (user_id, "%" + searchparams + "%"))

另见:

关于使用 mySQL 原始数据库查询的 Python 字符格式给我带来了问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19051661/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com