2015-01-14 2 views
0

У меня есть проблема при работе executemany с cx_OraclePython функция executemany

Когда я запускаю следующее заявление, я получаю ORA-01036: illeagal variablename/number

infotext_list список строк, которые должны быть сопоставлены с "SOMETHING" это выглядит ["abc", "bcd", "def", ...], и каждая строка в ней должна сравниваться с SOMETHING в том, что другие databasetable!

insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = ? ' 
curs.executemany(insert_stmt, infotext_list) 

Если я итерацию по infotext_list и использовать стандартный метод execute() это просто отлично работает, но он принимает навсегда.

+0

Что такое 'infotext_list' и какое именно сообщение об ошибке вы получаете. –

+0

Нет предложений? : / – goldjunge

ответ

0

Несколько вещей, которые я изменил, чтобы заставить это работать для меня.

1- Изменить infotext_list быть список mappings or sequences

infotext_list = [("abc",), ("bcd",), ("def",)] --notice the extra , inside the() 

или

infotext_list = [{'value':"abc"}, {'value':"bcd"}, {'value':"def"}] 

2- Изменить? быть: значение, если вы хотите использовать отображение или: 1 (или любой другой: имя вы хотите), если вы хотите использовать последовательность

Обе эти работы для меня

infotext_list = [("abc",), ("bcd",), ("def",)] 
insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = :1 ' 
curs.executemany(insert_stmt, infotext_list) 

infotext_list = [{'value':"abc"}, {'value':"bcd"}, {'value':"def"}] 
insert_stmt = 'INSERT INTO data_table (...) SELECT ... FROM other_table WHERE SOMETHING = :value ' 
curs.executemany(insert_stmt, infotext_list) 

У меня есть короткая запись на использовании cx_Oracle для операций crud here.

Смежные вопросы