Переменные привязки исключений с помощью cx_Oracle в python - PullRequest
1 голос
/ 24 августа 2011

Хорошо, я подключен к базе данных oracle в python 2.7 и cx_Oracle 5.1, скомпилированных с использованием мгновенного клиента 11.2.У меня есть курсор на базу данных, и запуск SQL не является проблемой, за исключением этого:


    cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE',
                     schema_trigger_name='test.test_trigger')

или


    cursor.prepare('ALTER TRIGGER :schema_trigger_name DISABLE')
    cursor.execute(None,{'schema_trigger_name': 'test.test_trigger'})

оба приводят к ошибке из Oracle:


    Traceback (most recent call last):
      File "connect.py", line 257, in 
        cursor.execute('ALTER TRIGGER :schema_trigger_name DISABLE',
                    schema_trigger_name='test.test_trigger')
    cx_Oracle.DatabaseError: ORA-01036: illegal variable name/number

Во время работы:


    cursor.execute('ALTER TRIGGER test.test_trigger DISABLE')

работает отлично.В чем проблема с привязкой этой переменной?

Ответы [ 2 ]

2 голосов
/ 24 августа 2011

В вашем примере test.test_trigger это не переменная, а объект. Вы можете связывать только переменные (которые могут быть заменены значением).

Запрос, который вы пытаетесь выполнить, будет логически эквивалентен:

ALTER TRIGGER 'test.test_trigger' DISABLE

Привязка в этом случае не будет работать, вам придется динамически создавать запрос.

0 голосов
/ 24 августа 2011

Обычно вы не можете связать имя объекта в Oracle.Для переменных это будет работать, но не для триггеров, таблиц и т. Д.

...