db2 Python( flask ,JayDeBeApi)运行时错误:找不到与prepareStatement匹配的重载

3pvhb19x  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(181)

正如在标题中提到的,当我试图执行一个预准备语句时,我得到了这个错误。完整的错误是:

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),调试时在traceback中向我显示了这个错误。
我尝试使用html输入的输入,它存储在benutzerObjekt.name和benutzerObjekt.email中,作为select SQL语句的输入。因此,很可能是SQL语句或语句的执行出错了,调试时会给语句加下划线。我使用db2。
提前感谢!

vltsax25

vltsax251#

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

相关问题