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

È stato utile?

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
scroll top