Я использую API Python Popen для подключения к базе данных Oracle через sqlplus.Как избежать функции Python Popen communication() с sqlplus с возвратом одинаковых заголовков несколько раз
Мой код:
prodMirrSession = Popen(['sqlplus','-S',prodMirrConnectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
prodMirrSession.stdin.write(sqlCommand)
prodQueryResult, prodErrorMsg = prodMirrSession.communicate()
В prodQueryResult, в то время как данные отдельных строк в Resultset правильно, заголовок Resultset получает повторяется несколько раз. например:
PKD_PKG_DEF_ID||'-'||PKD_NAME||'-'||PKD_JOB_ID||'-'||PKD_OUTPUTDIR||'-'||PKD_FRE
--------------------------------------------------------------------------------
Row 1
Row 2
Row 3
PKD_PKG_DEF_ID||'-'||PKD_NAME||'-'||PKD_JOB_ID||'-'||PKD_OUTPUTDIR||'-'||PKD_FRE
--------------------------------------------------------------------------------
Row 4
......
Это не тот случай, когда с помощью SQLPlus как команда автономного Баш оболочки или через Баш сценариев.
Это их способ избежать этого через API Popen. Не хотите нести дополнительные накладные расходы на выполнение итерации всего набора данных stdoutdata из Popen.communicate() в моем коде Python, чтобы фильтровать многократный заголовок resultSet.
Спасибо.
Это не похоже на хороший способ подключения к db. У Oracle отличная [библиотека интерфейса Python] (https://pypi.python.org/pypi/cx_Oracle). –
Я согласен с @DanielRoseman (хотя я был в ситуациях, когда искусственные требования были помещены как «должны использовать sqlplus» клиентами). – woot