我想使用python和jaydebeapi从oracle DB中选择数据。我试图使用下一个脚本获取数据:
bank_accounts = """
SELECT ACCOUNT_NUM, VALID_TO, CLIENT, CREATE_DT, UPDATE_DT
FROM ACCOUNTS where client = ?"""
clients = ['6948','3603','3919']
curs.execute(bank_accounts, clients[0])
但是结果我得到一个错误:
java.sql.SQLException: java.sql.SQLException: Invalid column index
有什么问题吗?如何传递参数到。execute?
在Python的DB-API规范PEP 249中,对于cursor.execute
,它指定了jaydebeapi
可能遵循的参数参数:
因此,考虑在元组或列表等序列中传递单个值,而不是尝试从列表中的第一个项切片时的标量:形参可以作为序列或映射提供,并将在操作中绑定到变量。
# param as one-item tuple
curs.execute(bank_accounts, (clients[0],))
# params as one-item list
curs.execute(bank_accounts, [clients[0]])
或者,如果您对多个客户端使用IN
操作符,则直接传递您的列表:
bank_accounts = (
"SELECT ACCOUNT_NUM, VALID_TO, CLIENT, CREATE_DT, UPDATE_DT "
"FROM ACCOUNTS "
"WHERE client IN (?, ?, ?)"
)
clients = ['6948','3603','3919']
curs.execute(bank_accounts, clients)