запускаю загрузчик SQL из скрипта Python (2.7);
Пароль содержит знак @
.Если я вызываю sql loader из командной строки и экранирую пароль (username/\"p@ssword\"@database)
, процесс работает.Однако когда я применяю ту же логику в скрипте Python, я получаю сообщение об ошибке:
SQL * Loader-704: Внутренняя ошибка: ulconnect: OCIServerAttach [0]
ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения
Поскольку я могу успешно выполнить ту же команду в приглашении cmd, я не думаю, что это проблема с TNSNAMES.ORA
файл, содержащий неверные или отсутствующие параметры.Я вполне уверен, что это проблема вызова SQL-загрузчика из команды подпроцесса и escape-символов.
Логика Python:
subprocess.call("sqlldr userid=" +config.ddw["user"] + "/\"" +
config.ddw["password"] +"\"@" + config.ddw["connection"] + "
control=C:/projects/controlFile.ctl log=C:/logFile.log)
Если я напечатаю этот оператор, строка будет выглядеть так:
sqlldr userid=USERNAME/"p@ssw0rd"@connection/db
(2.7)control=C:/projects/controlFile.ctl log=C:/logFile.log
Когда я загружаю строку прямо в командной строке, она работает:
sqlldr userid=USERNAME/\"p@ssw0rd\"@connection/db
control=C:/projects/controlFile.ctl log=C:/logFile.log