0

我发现了 Oracle 的 SQLCL 并能够使其在终端中工作。通过输入实际的 SQL 查询,我还能够使其在 Python 中工作。

我在 Python 中的代码如下所示:

import subprocess
import time
import os

os.chdir("C:/sqlcl/bin")

subprocess.run(["sql", "username/password@//database-oracle.datamore.com/moreprod.more:1521"])

此时,我得到“SQL>”提示,表明 Oracle 已准备好接受我的查询。我想做的是在脚本中输入位置并执行它,例如:

@C:/Users/username/queries/test-query.sql;

基本上,我需要一种通过 Python 将 SQL 语句或脚本位置传递给 SQL 提示符的方法。

4

3 回答 3

0

这是将项目传递给子流程的方法

args = ["grep", "beans"]

child_proccess = subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE)

child_process_output = child_proccess.communicate(b"I love beans \n I like cars")[0]

print(child_process_output)
于 2020-11-18T01:32:13.703 回答
0

这是有效的:

import subprocess
import os

os.chdir("C:/sqlcl/bin")

subprocess.run(["sql",
                "username/password@//database-oracle.datamore.com/moreprod.more:1521",
                "@",
                "C:/sqlcl/bin/test-query.sql",
                ";"])

请注意,查询与 SQLCL 应用程序位于同一目录中

于 2020-11-19T18:01:07.800 回答
0
import pexpect
from os import environ
import sys
environ['TNS_ADMIN'] = wallet
sqlcl_bin = '/sqlcl_source/sqlcl/bin/sql /nolog' # path to sqlcl bin 
child = pexpect.spawn (sqlcl_bin)
child.logfile = sys.stdout.buffer
child.expect('SQL>', timeout=30)
user=
password=
service= 
conn_string = f"conn {user}/{password}@{service};"
child.sendline(conn_str)

这就是我连接的方式

于 2021-03-27T09:42:22.513 回答