Python e CX_oracle - Cursor Dynamic.setInputsizes
Domanda
Sto usando CX_oracle per selezionare le righe da un database e quindi inserire quelle righe in una tabella in un altro database. Le colonne della 2a tabella corrispondono al primo selezione. Quindi ho (semplificato):
db1_cursor.execute('select col1, col2 from tab1')
rows = db1_cursor.fetchall()
db2_cursor.bindarraysize = len(rows)
db2_cursor.setinputsizes(cx_Oracle.NUMBER, cx_Oracle.BINARY)
db2_cursor.executemany('insert into tab2 values (:1, :2)', rows)
Funziona bene, ma la mia domanda è come evitare la codifica hard nelle setinputsures (ho molte più colonne). Posso ottenere i tipi di colonna da DB1_Cursor.Description, ma non sono sicuro di come alimentare quelli nelle setinputs. cioè come posso passare un elenco per setinputsizes anziché argomenti? Spero che questo abbia senso - nuovo a Python e CX_ORACLE
Soluzione
Basta usare tuple disimballaggio. per esempio.
db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow