2

我有一个带有以下代码的 .sql 文件:

delete from stalist
where stalistid=4944
/
insert into stalist
(stalistid, staid)
(select distinct 4944, staid
from staref
Where staid in(
3797,3798,
3870,4459,
3871,3872,
3876,3877,
0
))
/
commit
/

我想使用 Python 从 SQLPlus 执行这个文件。这可能吗?我在这类工作中没有任何 python 经验,可以使用一些帮助。谢谢!

4

2 回答 2

8

请参阅本教程: http: //moizmuhammad.wordpress.com/2012/01/31/run-oracle-commands-from-python-via-sql-plus/

IE

from subprocess import Popen, PIPE

#function that takes the sqlCommand and connectString and retuns the output and #error string (if any)

def runSqlQuery(sqlCommand, connectString):

session = Popen(['sqlplus', '-S', connectString], stdin=PIPE, stdout=PIPE, stderr=PIPE)
session.stdin.write(sqlCommand)
return session.communicate()

应该这样做(其中 sqlCmmand 是“@scriptname.sql”)。

于 2012-11-26T15:40:09.400 回答
1

以下是如何执行此操作的示例。您需要读取文件并将整个字符串作为命令传递。

(username, password, host) = ("user","password","host") 

conn_string = " %s/%s@%s "% (username,password,host)
session = Popen(['sqlplus','-S', conn_string], stdin=PIPE, stdout=PIPE, stderr=PIPE)
logging.info("Starting sqlplus")

sql_file = '%s/%s' % (sql_folder, file)
logging.info("Running " + sql_file)
f= open(sql_file,'r')
cmd = f.read()
session.stdin.write(cmd)

stdout, stderr = session.communicate()
于 2013-03-22T15:00:10.500 回答