簡體   English   中英

在python中使用SQLCL運行sql腳本

[英]run sql script using SQLCL in python

我發現了 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 提示符的方法。

這是將項目傳遞給子流程的方法

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)

這是有效的:

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 應用程序在同一目錄中

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)

這就是我的連接方式

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM