python和cx_Oracle - 动态cursor.setinputsizes

问题描述:

我正在使用cx_Oracle从一个数据库中选择行,然后将这些行插入到另一个数据库中的表中。第二个表的列与第一个选择相匹配。 所以我(简化):python和cx_Oracle - 动态cursor.setinputsizes

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。即如何传递列表来设置输入大小而不是参数? 希望这是有道理的 - 新的蟒蛇和cx_Oracle

只需使用tuple unpacking。 例如。

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

非常感谢,还没有看到。 – 2012-01-16 16:17:46