2016-06-28 1 views
1

Я использую 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.

Спасибо.

+1

Это не похоже на хороший способ подключения к db. У Oracle отличная [библиотека интерфейса Python] (https://pypi.python.org/pypi/cx_Oracle). –

+0

Я согласен с @DanielRoseman (хотя я был в ситуациях, когда искусственные требования были помещены как «должны использовать sqlplus» клиентами). – woot

ответ

1

Я считаю, что это из-за страниц. Вы можете установить размер страницы в какой-то очень большое число, которое превышает ваш количество строк:

set pagesize 1000000 

Или вы можете отключить заголовки полностью (и добавить их вручную или обрабатывать его позиции):

set pagesize 0 

Или вы можете использовать скрытую функцию для печати только первый заголовок (YMMV, не уверен, что она всегда будет там в будущем):

set pagesize 0 embedded on 

Кроме того, поскольку я заметил, что вы редактировали вопрос, и я вижу й e подчеркивает ... вы также можете удалить это (не то, что вы просили об этом, но похоже, что-то, что вы, возможно, захотите):

set underline off 
Смежные вопросы