shell 使用Python调用Oracle sqlldr

mdfafbf1  于 2022-11-25  发布在  Shell
关注(0)|答案(2)|浏览(138)

我正在尝试使用python加载sqlldr,所以我使用subprocess.call来实现这一点。

cmd = 'sqlldr USERID={user}/{password}@Databse_name control={controlfile} data={datafile}'
subprocess.call(cmd, shell=True)

输出显示:
sqlldr用户ID ={用户}/{密码}@数据库名称控制={控制文件}没有这样的文件目录
有人能帮我吗?我们在@后面加什么?

oipij1gg

oipij1gg1#

提供完整路径,而不仅仅是文件名。

x7yiwoj4

x7yiwoj42#

请尝试使用shell。请确保您已经下载了instant_client for oracle以及sqlldr。

import os
import subprocess

BASE_DIR = Path(__file__).resolve().parent
control_file = os.path.join(BASE_DIR, 'SAMPLE_ITEM_LOAD.ctrl')
data_file = os.path.join(BASE_DIR, 'sample_item_load.csv')

my_env = os.environ.copy()
my_env["PATH"] = f"{my_env['ORACLE_HOME']}:{my_env['PATH']}"

sql_con = f'{username}/{password}@{host}:{port}/{db_sid}'

sql_ld_command = f'sqlldr {sql_con} CONTROL={control_file} DATA={data_file}'
    sql_ldr_proc = subprocess.Popen(sql_ld_command,shell=True,
                                       env=my_env,
                                       stdin=subprocess.PIPE,
                                       stdout=subprocess.PIPE,
                                       stderr=subprocess.PIPE)
            
    out, err = sql_ldr_proc.communicate()
    retn_code = sql_ldr_proc.wait()

相关问题