2016-06-28 13 views
1

Python Popen APIを使用してsqlplus経由でOracleデータベースに接続していますか?Pythonを回避する方法sqlplusとのpopen communications()関数は、同じヘッダを複数回返すことを回避します。

マイコード:結果セットの個々の行のデータが正しいながらprodQueryResultで

prodMirrSession = Popen(['sqlplus','-S',prodMirrConnectString], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
prodMirrSession.stdin.write(sqlCommand) 
prodQueryResult, prodErrorMsg = prodMirrSession.communicate() 

、結果セットヘッダは複数回繰り返されます。 例えば:スタンドアロンbashシェルコマンドとしてやbashスクリプト経由でSQLPLUSを使用している場合

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 
...... 

これはそうではありません。

Popen API自体で回避する方法です。 ResultSetのヘッダが複数回フィルタリングされるように、PythonコードのPopen.communicate()からstdoutdata 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 

をあなたはそれを削除することもできますが、あなたが望むかもしれないもののように見えます:

set underline off 
関連する問題