Изменение схемы с помощью cx_Oracle

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

Я играл 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 "", line 1, in 
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 битов, на той же самой машине.

5
задан M J 15 February 2013 в 17:50
поделиться

2 ответа

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

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

  • WITH_UNICODE активирует кодировку, а nencoding атрибуты
  • ORACLE_10G активирует действие, модуль, clientinfo и current_schema

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

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

9
ответ дан 13 December 2019 в 19:28
поделиться

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

2
ответ дан 13 December 2019 в 19:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: