Estou tentando migrar de cx_Oracle 8.1.0
para oracledb 2.5.1
library. Antes de tal query funcionar:
update command_center set
E_ID = :1,
E_ASPECTS = :2,
E_CREATED_TIMESTAMP = :3
WHERE e_id = :1
def bulk_insert_or_update_data_to_targets(self, sql, target_data, id_index=0):
for target_connections, data in target_data:
for con in target_connections:
cursor = con.cursor()
cursor.executemany(sql, data, batcherrors=True)
if cursor.getbatcherrors():
self.logger.debug("data: " + str(data))
cursor.close()
mas atualmente tenho a seguinte exceção:
oracledb.exceptions.DatabaseError: DPY-4009: 4 positional bind values are required but 3 were provided
Existe alguma chance disso funcionar da mesma forma que funcionava cx_Oracle
antes... então acho que ele recuperou o atributo pelo índice da matriz?
O último é o preferido porque não incorre no tipo de problema que você vê. Até mesmo o modo Thick tem algumas variações com bind-by-position que dependem se você está usando instruções SQL ou PL/SQL.
Acredito que o problema pode ser devido ao uso
:1
duas vezes na consulta.Você não precisa
E_ID = :1
naSET
cláusula, já que está definindo a coluna para o mesmo valor que ela já tem (por causa deWHERE E_ID = :1
). Então remova isso: