数据库
首页 > 数据库> > python和cx_Oracle – 动态cursor.setinputsizes

python和cx_Oracle – 动态cursor.setinputsizes

作者:互联网

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

解决方法:

只需使用tuple unpacking.
例如.

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

标签:python,cx-oracle
来源: https://codeday.me/bug/20190626/1292459.html