Python(Flask,JayDeBeApi) RuntimeError: No matching overloads found for prepareStatement

Python(Flask,JayDeBeApi) RuntimeError: No matching overloads found for prepareStatement

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

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

据我所知,可能是因为我正在尝试使用准备好的语句,所以编译器无法找到重载 ?占位符。

代码片段:

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

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

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

提前致谢!

您需要将参数作为 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)