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)
非常感谢,还没有看到。 – 2012-01-16 16:17:46