2013-07-08 45 views
1

我迁移我的以下bash脚本到Python击到Python迁移

bash代码

sqlplus -S User/[email protected] << EOF 
whenever sqlerror exit sql.sqlcode; 
set echo off 
set heading off 
prompt ***************************** 
prompt *** Running Script 1*** 
@/my/location/Script1 
prompt ***************************** 
prompt *** Running Script 2*** 
@/my/location/Script2 
exit; 
EOF 

Python代码

(username, password, host) = ("user","psw","isntance") 
conn_string = " %s/%[email protected]%s "% (username,password,host) 
#for script1 
session = Popen(['sqlplus','-S', conn_string], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
sql_file = '%s/%s' % ('/my/folder', 'Script1.sql') 
with open(sql_file) as f: 
    stdout, stderr = session.communicate(f.read()) 
print stdout 
print stderr 

#for script2 
session = Popen(['sqlplus','-S', conn_string], stdin=PIPE, stdout=PIPE, stderr=PIPE) 
sql_file = '%s/%s' % ('/my/folder', 'Script2.sql') 
with open(sql_file) as f: 
    stdout, stderr = session.communicate(f.read()) 
print stdout 
print stderr 

我有两个问题,

1)有没有办法运行这两个脚本,而无需打开另一个 实例Popen 2)如何在python代码中实现prompt功能 ?

回答

3

在Python中,您不应该为数据库连接提供支持。改用相应的数据库模块,在这种情况下,请使用cx_Oracle。 Oracle甚至在这方面有一个tutorial。从那里引用了简单的查询例子:

import cx_Oracle 

con = cx_Oracle.connect('pythonhol/[email protected]/orcl') 

cur = con.cursor() 
cur.execute('select * from departments order by department_id') 
for result in cur: 
    print result 

cur.close() 
con.close()   
+0

问题是我没有'cx_Oracle'模块installed.I不必安装在哪里我运行的蟒蛇服务器的访问权。因此,替代方法。 – misguided

+0

与谁可以安装模块并要求他们这样做。除非你至少试图修复它,否则不要解决问题。 –

+0

Ansgar,对不起,我正在自己的时间学习(因为python默认在我们的服务器unix安装中出现)。无法让系统管理员在我的服务器上安装新的东西。但我很欣赏您回答查询所花费的时间,我已经提出了您的回答:) – misguided