python и cx_Oracle - динамический курсор. setinputsizes

Я использую cx_Oracle для выбора строк из одной базы данных, а затем вставляю эти строки в таблицу в другой базе данных. Столбцы 2-й таблицы соответствуют первому выбору. Итак, у меня есть (упрощенно):

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. т.е. как я могу передать список для задания размеров вместо аргументов? Надеюсь, это имеет смысл - новичок в python и cx_Oracle


person Joe Watkins    schedule 16.01.2012    source источник


Ответы (1)


Просто используйте распаковку кортежей. например.

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