我正在使用cx_Oracle从一个数据库中选择行,然后将这些行插入到另一个数据库中的表中。第二个表的列与第一个选择匹配。
所以我有(简体):

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)

这很好用,但是我的问题是如何避免在setinputsizes中进行硬编码(我有很多列)。
我可以从db1_cursor.description中获得列类型,但是我不确定如何将这些类型输入setinputsizes中。即如何将列表传递给setinputsizes而不是参数?
希望这有意义-python和cx_Oracle的新手

最佳答案

只需使用tuple unpacking即可。
例如。

db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)

09-27 08:28