gpt4 book ai didi

python - 使用python连接远程主机中的sqlplus并执行sql命令

转载 作者:太空宇宙 更新时间:2023-11-04 05:53:13 24 4
gpt4 key购买 nike

这是我的情况:我们在远程机器上设置了 sqlplus,我想连接到该远程机器,然后运行 ​​sqlplus 来执行 sql 查询。我正在尝试编写一个 python 脚本来执行此操作。

这是我的代码:

import sys

import getpass

import paramiko

import time

user=raw_input('Enter User Name :')

#host_name=raw_input('Enter Host Name:')

psswd=getpass.getpass()

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('xxx.hostname.xxx',port=22, username=user, password=psswd)

command='export ORACLE_HOME=/opt/app/oracle/product/10.2.0.2/client export LD_LIBRARY_PATH=$ORACLE_HOME/lib \
sudo -S -H /XX/XX/XX/bin/sqlplus'



print 'running remote command'

print(command)

stdin, stdout, stderr=ssh.exec_command(command)

stdin.write(psswd+'\n')

stdin.flush()

for out in stdout.readlines():

print out

ssh.close()

这里有两个问题首先是如果我像这样传递命令

'export ORACLE_HOME=/opt/app/oracle/product/10.2.0.2/client export LD_LIBRARY_PATH=$ORACLE_HOME/lib \
sudo -S -H /XX/XX/XX/bin/sqlplus' +' echo $ORACLE_HOME'

即使我添加了 echo,我也得到一个空的响应,这意味着变量设置不正确。

其次,我不知道接下来要做什么。如何向sqlplus提供用户名/密码以允许执行sql查询,然后如何提供sql语句。

最佳答案

我遇到了与您类似的问题,并最终编写了一个库来执行此操作。这是一段“伪伪代码”,应该可以为您指明正确的方向。请记住,这些是类的方法,您需要根据需要调整此伪代码。请记住,您在这里已经需要来自 paramiko 的 SSHConnection。

   def sqlplus_cmd(self, command):
# Create string which exports environmental variables from OracleEnv class ()
if 'CYGWIN' not in <return from 'uname' on the host>:
# If NOT Cygwin, concatenate environmental variable exports
oracle_exports = 'export PATH={0}:$PATH;' \
'export ORACLE_HOME={1};' \
'export ORACLE_SID={2}'.format(<oracle_path>, <oracle_home>, <oracle_sid>)
else:
# If Cygwin, need to source environmental variables for shell session from script
# TODO: May need to get Oracle Home and Path as well for some systems.
self.cmd('echo "export ORACLE_SID={0}" > /tmp/sid'.format(<oracle_sid>))
oracle_exports = 'source /tmp/sid'

# Issue concatinated one line command which exports variables, opens sqlplus, and issues a sqlplus statement
# final_command = oracle_exports + ';' + 'echo "' + command + '" | sqlplus -S / as sysdba'
final_command = '{0};echo "{1}" | sqlplus -S / as sysdba'.format(oracle_exports, command)
stdout, stderr, rc = <paramiko_SSHConnection.exec_command>(final_command)

应该可以了。享受解析输出并在标准输出中捕获 ORA-xxx 和 SP2-xxx 错误的乐趣。

关于python - 使用python连接远程主机中的sqlplus并执行sql命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29125980/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com