Ну надеюсь это не дубликат, поиск ничего полезного не дал.
Последние несколько дней я играл с cx_Oracle
, устанавливая и используя его. Все шло хорошо, пока я не достиг своей текущей проблемы: я хотел бы изменить свою схему. Если бы я использовал sqlplus, просто "изменить набор сеансов 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
А вот информация об ОС и питоне:
SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 3
И я использую python 2.6.2 (скомпилирован для 64 бит)
Я также скомпилировал cx_Oracle
для 64-битной версии на той же машине.
__setattr__
можно было бы переопределить, чтобы реализовать его каким-то таинственным образом. Что более важно, чемdir(c)
, так это реальная ошибка, которую вы на самом деле получили, когда действительно сделалиc.current_schema='toto'
. - person S.Lott   schedule 06.01.2010