【问题标题】:Python(Flask,JayDeBeApi) RuntimeError: No matching overloads found for prepareStatementPython(Flask,JayDeBeApi)RuntimeError:没有为prepareStatement找到匹配的重载
【发布时间】:2022-01-10 23:57:38
【问题描述】:

如标题中所述,当我尝试执行准备好的语句时出现此错误。完整的错误是:

RuntimeError: No matching overloads found for prepareStatement in find. at native\common\jp_method.cpp:127

据我所知,这可能是因为我试图使用准备好的语句,编译器找不到重载的东西?占位符。

代码sn-p:

 curs = self.dbconn.cursor()  
 sqlLogin = ("SELECT name,email FROM BENUTZER where name=? and email=?", ( benutzerObjekt.name,benutzerObjekt.email))
 curs.execute(sqlLogin)

错误似乎发生在 curs.execute(sqlLogin),调试时在 traceback 中显示给我。

我正在尝试使用存储在 benutzerObjekt.name 和 benutzerObjekt.email 中的 html 输入作为 select SQL 语句的输入。因此,很可能我的 SQL 语句或语句的执行有问题,在调试时会加下划线。我正在使用 db2。

提前致谢!

【问题讨论】:

    标签: python sql db2 prepared-statement


    【解决方案1】:

    您需要将参数作为cursor.execute 中的第二个参数传递。现在,您的查询是一个包含两个项目的嵌套元组,第一个是字符串,第二个项目是两个值的元组。

    考虑分离函数调用的参数:

    curs = self.dbconn.cursor() 
    
    # SINGLE STRING VALUE
    sqlLogin = "SELECT name,email FROM BENUTZER WHERE name=? AND email=?"
    
    # TUPLE OF TWO VALUES
    vals = (benutzerObjekt.name, benutzerObjekt.email)
    
    # PASS SQL AND PARAMS SEPARATELY
    curs.execute(sqlLogin, vals)
    

    或者,您可以使用星号 * 解压缩嵌套元组:

    sqlLogin = (
        "SELECT name,email FROM BENUTZER where name=? and email=?", 
        (benutzerObjekt.name, benutzerObjekt.email)
    )
    
    curs.execute(*sqlLogin)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-11
      • 1970-01-01
      • 2018-04-12
      • 2019-10-12
      • 2017-11-14
      • 1970-01-01
      相关资源
      最近更新 更多