python и cx_Oracle - динамический курсор. setinputsizes - PullRequest
4 голосов
/ 16 января 2012

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

1 Ответ

4 голосов
/ 16 января 2012

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

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