如何在jaydebeapi .execute传递参数?



我想使用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)

最新更新