如何避免使用 sqlplus 的 Python Popen communicate() 函数多次返回相同的 headers
How to avoid Python Popen communicate() function with sqlplus from returning same headers multiple times
正在使用 Python Popen API 通过 sqlplus 连接到 Oracle 数据库。
我的代码:
prodMirrSession = Popen(['sqlplus','-S',prodMirrConnectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
prodMirrSession.stdin.write(sqlCommand)
prodQueryResult, prodErrorMsg = prodMirrSession.communicate()
在 prodQueryResult 中,虽然 resultSet 中各行的数据是正确的,但 resultSet header 重复了多次。
例如:
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 作为独立 bash shell 命令或通过 bash 脚本使用时,情况并非如此。
他们是通过 Popen API 本身来避免它的一种方法。不想在我的 Python 代码中从 Popen.communicate() 迭代整个 stdoutdata 结果集以过滤多次出现的结果集 header.
时产生额外的性能开销
谢谢。
我认为这是页面大小的问题。您可以将页面大小设置为超出行数的某个非常大的数字:
set pagesize 1000000
或者您可以完全关闭 headers(并手动添加或按位置处理):
set pagesize 0
或者你可以使用隐藏功能只打印第一个 header(YMMV,不确定它是否会在未来一直存在):
set pagesize 0 embedded on
此外,由于我注意到您编辑了问题并且我看到了下划线...您也可以将其删除(不是您要求的,但似乎是您可能想要的):
set underline off
正在使用 Python Popen API 通过 sqlplus 连接到 Oracle 数据库。
我的代码:
prodMirrSession = Popen(['sqlplus','-S',prodMirrConnectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
prodMirrSession.stdin.write(sqlCommand)
prodQueryResult, prodErrorMsg = prodMirrSession.communicate()
在 prodQueryResult 中,虽然 resultSet 中各行的数据是正确的,但 resultSet header 重复了多次。 例如:
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 作为独立 bash shell 命令或通过 bash 脚本使用时,情况并非如此。
他们是通过 Popen API 本身来避免它的一种方法。不想在我的 Python 代码中从 Popen.communicate() 迭代整个 stdoutdata 结果集以过滤多次出现的结果集 header.
时产生额外的性能开销谢谢。
我认为这是页面大小的问题。您可以将页面大小设置为超出行数的某个非常大的数字:
set pagesize 1000000
或者您可以完全关闭 headers(并手动添加或按位置处理):
set pagesize 0
或者你可以使用隐藏功能只打印第一个 header(YMMV,不确定它是否会在未来一直存在):
set pagesize 0 embedded on
此外,由于我注意到您编辑了问题并且我看到了下划线...您也可以将其删除(不是您要求的,但似乎是您可能想要的):
set underline off