Вопрос

Что ж, я надеюсь, что это не дубликат, поиск не дал ничего полезного.

Я играл с cx_Oracle в течение последних нескольких дней устанавливал и использовал его.Все шло нормально, пока я не добрался до своей текущей проблемы:Я бы хотел изменить свою схему.Если бы я использовал sqlplus, хватило бы простого 'alter session set current_schema=toto;', но я не знаю, как обойти это с помощью cx_Oracle.

Я скачал последнюю исходную версию:cx_Oracle-5.0.2.tar.gz .

В соответствии с Документация изменение схемы - это простой случай настройки Connection.current_schema который должен быть атрибутом чтения-записи...проблема в том, что мой Connection объект не имеет никаких current_schema атрибут.

>>> c = cx_Oracle.connect(...)
>>> dir(c)
['__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', 
'__getattribute__', '__hash__', '__init__', '__new__', '__reduce__',
'__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', 
'__subclasshook__', 'autocommit', 'begin', 'cancel', 'changepassword', 'close', 
'commit', 'cursor', 'dsn', 'encoding', 'inputtypehandler',
'maxBytesPerCharacter', 'nencoding', 'outputtypehandler', 'password', 'prepare', 
'register', 'rollback', 'stmtcachesize', 'tnsentry', 'unregister', 'username', 
'version']

Попытка установить атрибут с помощью

>>> c.current_schema = 'toto'

приводит к ошибке... __setattr__ очевидно, был переопределен, чтобы предотвратить это.

Итак...кто - нибудь знает , как это сделать ?


Вот ошибка, которую я получил.

>>> c.current_schema = 'toto'
Traceback (most recent call last):
 File "<stdin>", line 1, in <module>
AttributeError: 'cx_Oracle.Connection' object has no attribute 'current_schema'

>>> setattr(c, 'current_schema', 'toto')
# same error

А вот информация об операционной системе и python:

SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 3

И я использую python 2.6.2 (скомпилирован для 64 бит)

Я также скомпилировал cx_Oracle для 64 бит, на той же самой машине.

Это было полезно?

Решение

Итак, я, наконец, после долгих попыток и ошибок, последовал fn внушение и исследованное изнутри cx_Oracle чтобы найти, что было не так.

Оказывается, что ряд аргументов и методов доступны только через некоторые флаги:

  • WITH_UNICODE активирует encoding и nencoding атрибуты
  • ORACLE_10G активирует action, module, clientinfo и current_schema

Я проверил и обнаружил, что я скомпилировал cx_Oracle против версии 9 клиента oracle...итак, я перекомпилировал версию 10.2.0.3 клиента oracle, и теперь у меня есть доступ к этим атрибутам.

Жаль, что это ограничение не было четко прописано в документации...и я очень благодарен за то, что исходный код доступен.

Другие советы

Попробуйте переустановить cx_Oracle.Ваш cx_Oracle, вероятно, испорчен.Какая у вас операционная система и версия python?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top