Передача списка значений в Oracle с использованием Python - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь определить список значений (идентификационные номера) и передать их в SQL, который запрашивает таблицы Oracle.

Этот код работает, пока я включаю только один идентификатор.

named_params = {'ids':'123456548'}
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in :ids
"""
df = pd.read_sql(query, connection, params=named_params)

Какой правильный синтаксис для выполнения того же, но передачи списка идентификаторов?

Этот код, например, не работает:

idlist = ['123456548','546465464']
named_params = {'ids':idlist}
query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in :ids
"""
df = pd.read_sql(query, connection, params=named_params)

Возвращенная ошибка:

': ORA-01484: arrays can only be bound to PL/SQL statements

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Вам нужно будет создать отдельный параметр привязки для каждого элемента в списке, а затем передать список идентификаторов в read_sql():

idlist = ['123456548','546465464']

in_vars = ','.join(':%d' % i for i in range(len(idlist)))

query = """
select PEBEMPL_ECLS_CODE 
from PEBEMPL
inner join SPRIDEN on spriden_pidm = pebempl_pidm 
where SPRIDEN_CHANGE_IND is null
and SPRIDEN_ID in (%s)
""" % in_vars
df = pd.read_sql(query, connection, params=idlist)

Чтобы избежать путаницы, приведенный выше пример говорит сOracle использует функцию Pandas read_sql().Для людей, работающих с объектом cursor напрямую, синтаксис:

cursor.execute(query, params)
0 голосов
/ 24 мая 2018

Полагаю, вам придется передавать параметры в виде строки.Может быть, объединить все идентификаторы, которые вы хотите запросить, запятыми и отправить их в виде строки в SPRIDEN_ID.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...