Pergunta

Bem, eu espero que isso não é uma duplicata, a busca não deu nada de útil.

Eu tenho sido brincando com cx_Oracle para os últimos dias, instalar e usá-lo. Tudo correu bem até que eu alcancei meu problema atual: Eu gostaria de mudar meu esquema. Se eu estivesse usando sqlplus um simples 'set current_schema = toto alter sessão;' faria, mas eu não sei como obter em torno dele com cx_Oracle.

Eu fiz o download da versão mais recente fonte:. Cx_Oracle-5.0.2.tar.gz

De acordo com o href="http://cx-oracle.sourceforge.net/html/connection.html" rel="nofollow documentação mudança de esquema é um caso simples de configuração Connection.current_schema que deveria ser um atributo de leitura e escrita ... o problema é meu objeto Connection não tem qualquer atributo 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']

Tentando definir o atributo usando

>>> c.current_schema = 'toto'

resulta em um erro ... __setattr__ tem aparentemente sido substituído para impedi-lo.

Então ... Alguém sabe como?


Aqui está o erro que eu tenho.

>>> 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

E aqui estão as informações sobre OS e python:

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

E eu uso Python 2.6.2 (compilado para 64bits)

Eu também compilou cx_Oracle para 64bits, no mesmo máquina.

Foi útil?

Solução

Ok, eu finalmente, depois de muita tentativa e erro, sugestão fn seguido e investigados cx_Oracle dentro para encontrar o que estava errado.

Acontece que uma série de argumentos e métodos só estão disponíveis através de algumas bandeiras:

  • WITH_UNICODE ativa encoding e atributos nencoding
  • ORACLE_10G ativa action, module, clientinfo e current_schema

Eu verifiquei e descobri que eu tinha compilado cx_Oracle contra a versão 9 do cliente Oracle ... então eu recompilados contra a versão 10.2.0.3 do cliente Oracle e agora eu tenho acesso a esses atributos.

A vergonha que a restrição não foi precisados ??na documentação ... e eu sou muito grato que o código fonte está disponível.

Outras dicas

Tente reinstalar cx_Oracle. Seu cx_Oracle é provavelmente confuso. Qual é a sua versão do sistema operacional e python?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top