Я относительно новичок в Python. В настоящее время я работаю над выполнением операторов SQL в Oracle DB.
Когда я выполняю запрос:
query = 'select * from table'
cursor.execute(query)
result = cursor.fetchall()
все идет нормально, но когда я пытаюсь выполнить скрипт:
сценарий в виде простого текста:
begin
SIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');
end;
/
код из скрипта
script = "begin\nSIEBEL_DBA.X_DR_DEPLOY(id => '1-4NANEI', env_code => 'SVE_SIT');\nend;"
cursor.execute(script)
result = cursor.fetchall()
Я получаю исключение, что это не запрос, но все же этот скрипт сработал.
Итак, из того, что я гуглил, похоже, я должен использовать функцию callproc:
cursor.callproc['SIEBEL_DBA.X_DR_DEPLOY',{'id' : '1-4NANEI', 'env_code' : 'SVE_SIT'}]
connection.commit()
result = cursor.fetchall()
Когда я выполняю этот оператор, я также получаю исключение, но на этот раз в БД ничего не изменилось:
Объект 'builtin_function_or_method' не имеет атрибута 'getitem'
Может ли кто-нибудь указать, где я не прав, и как мне изменить оператор, чтобы он работал.
Заранее огромное спасибо!
РАЗРЕШАЮЩАЯ СПОСОБНОСТЬ:
Я был разочарован синтаксисом и сложностью функций callproc и callfunc. Я нашел хороший ресурс: http://dbaportal.eu/sidekicks/sidekick-cx_oracle-code-paterns/#part1 по этой ссылке я нашел всю необходимую информацию и примеры работы с библиотекой cx_Oracle.
в конце мне просто нужно было немного изменить мой код:
cursor.callproc('SIEBEL_DBA.X_DR_DEPLOY', ['1-4NANEI', 'SVE_SIT'])
и необходимая часть была выполнена, мне не нужно было указывать какой-либо тип возвращаемого значения, поскольку выполняемый мной скрипт не возвращает никакого значения, он просто устанавливает его.