python和cx_Oracle - 动态cursor.setinputsizes

时间:2012-01-16 15:15:08

标签: python cx-oracle

我正在使用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来说是新的

1 个答案:

答案 0 :(得分:4)

只需使用tuple unpacking即可。 例如

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