5

我正在使用 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 的新手

4

1 回答 1

6

只需使用元组解包。例如。

db_types = (d[1] for d in db1_cursor.description)
db2_cursor.setinputsizes(*db_types)
于 2012-01-16T15:38:58.190 回答