Pregunta

Estoy usando CX_Oracle para seleccionar filas de una base de datos y luego insertar esas filas en una tabla en otra base de datos. Las columnas de la segunda tabla coinciden con la primera selección. Entonces he (simplificado):

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)

Esto funciona bien, pero mi pregunta es cómo evitar la codificación dura en SetInputSizes (tengo muchas más columnas). Puedo obtener los tipos de columnas de db1_cursor.description, pero no estoy seguro de cómo alimentarlos a setInputSizes. es decir, ¿cómo puedo aprobar una lista para establecer INTUPSizes en lugar de argumentos? Espero que esto tenga sentido: nuevo en Python y CX_Oracle

¿Fue útil?

Solución

Solo usa Tuple desempaquetando. p.ej.

db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top