Question

J'utilise CX_oracle pour sélectionner les lignes dans une base de données, puis j'insère ces lignes vers une table dans une autre base de données. Les colonnes de la 2ème table correspondent au premier choix. J'ai donc (simplifié):

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)

Cela fonctionne bien, mais ma question est de savoir comment éviter le codage dur dans SetInputizes (j'ai beaucoup plus de colonnes). Je peux obtenir les types de colonnes à partir de DB1_Cursor.Description, mais je ne sais pas comment les alimenter en setInputSizes. c'est-à-dire comment puis-je transmettre une liste pour setInputSizes au lieu d'arguments? J'espère que cela a du sens - Nouveau sur Python et CX_oracle

Était-ce utile?

La solution

Utiliser juste déballage de tuple. par exemple.

db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top