python - 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 模块一起使用的示例: