【问题标题】:Keep getting errors trying to use input with mysql尝试使用mysql输入时不断出错
【发布时间】:2021-07-22 02:05:00
【问题描述】:

我在运行函数时不断收到此错误:

您的 SQL 语法有错误;查看与您的 MySQL 服务器版本相对应的手册,了解在 '%s) 附近使用的正确语法

我正在尝试输入取自另一个数据库的值。任何帮助将不胜感激....

def filmByID(results):
    

   sql = "select * from film where filmid in (%s)"
    
    with db:
        cursor = db.cursor()
        cursor.execute(sql, (results))
        films = cursor.fetchall()
        for film in films:
            print(film["FilmName"], film["FilmSynopsis"])

【问题讨论】:

  • 你没有显示你的 sql 字符串。你需要显示你的 sql 变量值
  • AFAIK,您不应该使用 IN 的参数替换。如果您需要匹配多个值,那么您需要拥有与值一样多的占位符。例如,cursor.execute("select * from film where filmid in (%s, %s, %s)", (1, 2, 3)).
  • 谢谢,当值的数量未知并且可以变化时,我可以为占位符做什么?
  • 这不是未知数。它在代码时是未知的,但在运行时是未知的。根据results 参数中提供的列表/元组的长度创建%s, %s 的字符串。 (根据filmByID方法的参数构建sql中的字符串。)
  • results 是列表还是元组?

标签: python sql database search input


【解决方案1】:

您的问题似乎可以归结为“我如何重复 %s 正确的次数,以匹配我的 results 参数?”

sql_list = ','.join(['%s'] * len(results))

sql = f"select * from film where filmid in ({sql_list})"

这样,如果您的 results 参数是,例如,[1, 2, 3],那么您最终会得到...

"select * from film where filmid in (%s,%s,%s)"

如果results参数是一个列表,而不是一个元组,那么你可能还需要将它转换成一个元组...

cursor.execute(sql, tuple(results))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多