2012-01-16 103 views
3

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

回答

4

只需使用tuple unpacking。 例如。

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

非常感謝,還沒有看到。 – 2012-01-16 16:17:46