首页 > 解决方案 > Pyodbc:如何在 sql 语句中使用动态数量的占位符

问题描述

我正在尝试在 python 中使用动态 sql 语句。我正在使用 Microsoft Access 数据库和 pyodbc

有时 sql 语句可能如下所示:

 sql_statement = '''SELECT PSN.PSN_FNAME AS Vorname, PSN.PSN_NAME, CAT.CAT_DEN, CZP.CZP_VALUE
 FROM PSN INNER JOIN (CAT INNER JOIN CZP ON CAT.CAT_ID = CZP.CAT_ID) ON PSN.PSN_ID = CZP.PSN_ID
 WHERE CAT_DEN = ? AND WHERE CAT_DEN = ?;'''

有时它可能看起来像这样:

sql_statement = '''SELECT PSN.PSN_FNAME AS Vorname, PSN.PSN_NAME, CAT.CAT_DEN, CZP.CZP_VALUE
FROM PSN INNER JOIN (CAT INNER JOIN CZP ON CAT.CAT_ID = CZP.CAT_ID) ON PSN.PSN_ID = CZP.PSN_ID
WHERE CAT_DEN = ? AND WHERE CAT_DEN = ? AND WHERE CAT_DEN = ? AND WHERE CZP.CZP_VALUE = ?;'''

所以我现在不知道我必须传递多少参数给语句。我认为唯一的解决方案是将参数存储在元组或列表中。这是我的问题。

我试过这样的事情:

 insert_list= [('Birthday'), ('Family')]
 sql_statement = '''SELECT PSN.PSN_FNAME AS Vorname, PSN.PSN_NAME, CAT.CAT_DEN, CZP.CZP_VALUE
 FROM PSN INNER JOIN (CAT INNER JOIN CZP ON CAT.CAT_ID = CZP.CAT_ID) ON PSN.PSN_ID = CZP.PSN_ID
 WHERE CAT_DEN = ? AND WHERE CAT_DEN = ?;'''
 self.cursor.execute(sql_statement, insert_list)

但我收到以下错误消息:

    self.cursor.execute(sql_statement, insert_tuple)
    pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC-Treiber für Microsoft Access] 
    Syntaxfehler (fehlender Operator) in Abfrageausdruck 'CAT_DEN = Pa_RaM000 AND WHERE CAT_DEN = 
    Pa_RaM001'. (-3100) (SQLExecDirectW)")

我如何在列表或元组中传递所有参数?

是一个如何与 mysql.connector python 模块一起使用的示例:

标签: pythonsqlms-accessdynamicpyodbc

解决方案


推荐阅读