python和cx_Oracle-dynamic cursor.setinputsizes

python和cx_Oracle-dynamic cursor.setinputsizes,python,cx-oracle,Python,Cx Oracle,我使用cx_Oracle从一个数据库中选择行,然后将这些行插入到另一个数据库的表中。第二个表的列与第一个select匹配。 所以我(简化了): 这很好,但我的问题是如何避免setinputsizes中的硬编码(我有更多的列)。 我可以从db1_cursor.description获取列类型,但我不确定如何将这些类型输入到setinputsizes中。i、 e.如何将列表传递给setinputsizes而不是参数? 希望这是有意义的-python和cx_Oracle都是新手只需使用即可。 例如 d

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

这很好,但我的问题是如何避免setinputsizes中的硬编码(我有更多的列)。 我可以从db1_cursor.description获取列类型,但我不确定如何将这些类型输入到setinputsizes中。i、 e.如何将列表传递给setinputsizes而不是参数? 希望这是有意义的-python和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)
db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)