Я генерирую список идентификационных номеров.Я хочу выполнить оператор вставки, который собирает все записи из одной таблицы, где значение идентификатора находится в моем списке, и вставляет эти записи в другую таблицу.
Вместо того чтобы проходить через несколько операторов execute (насколько я знаю, это возможно), я нашел эту функцию cx_Oracle, которая предположительно может выполнять все с помощью одного оператора и параметра списка.(Это также позволяет избежать неуклюжего форматирования оператора SQL перед передачей параметров) Но я думаю, что мне нужно изменить свой список перед передачей его в качестве параметра.Просто не знаю, как.
Я ссылался на эту веб-страницу: https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-executemany.html
ids = getIDs()
print(ids)
[('12345',), ('24567',), ('78945',), (' 65423 ',)]
sql = """insert into scheme.newtable
select id, data1, data2, data3
from scheme.oldtable
where id in (%s)"""
cursor.prepare(sql)
cursor.executemany(None, ids)
Я ожидал, что SQL-оператор будет выполняться следующим образом:
Вставить в sche.newtable select id,data1, data2, data3 из sche.oldtable где id in ('12345', '24567', '78945', '65423')
Вместо этого я получаю следующую ошибку: ORA-01036: недопустимоимя / номер переменной
Редактировать: я обнаружил этот StackOverflow: Как я могу выполнить пакетную вставку в базу данных Oracle с использованием Python? Я обновил свой код, чтобы подготовить оператор до этого, и обновилсписок элементов для кортежей, и я все еще получаю ту же ошибку.