Pregunta

Bueno, espero que esto no es un duplicado, la búsqueda no produjo nada útil.

He estado jugando con cx_Oracle durante los últimos días, la instalación y el uso de la misma. Todo fue bien hasta que llegué a mi problema actual: Me gustaría cambiar mi esquema. Si estuviera usando un simple sqlplus 'alter sesión de establecer CURRENT_SCHEMA = toto;' Lo haría, pero no sé cómo moverse con cx_Oracle.

He descargado la última versión de código:. Cx_Oracle-5.0.2.tar.gz

De acuerdo con la documentación href="http://cx-oracle.sourceforge.net/html/connection.html" rel="nofollow cambiar de esquema es un simple caso de ajuste Connection.current_schema que debe ser un atributo de lectura-escritura ... el problema es mi objetivo Connection no tiene ningún 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']

Tratar de establecer el atributo utilizando

>>> c.current_schema = 'toto'

resulta en un error ... __setattr__ aparentemente ha sido anulado para evitarlo.

Así que ... ¿alguien sabe cómo?


Aquí está el error que tengo.

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

Y aquí son la información sobre OS y Python:

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

Y uso de Python 2.6.2 (compilado para 64bits)

También compilado cx_Oracle de 64bits, en la misma máquina.

¿Fue útil?

Solución

Bueno, por fin, después de mucho probar y error, siguió la sugerencia fn e investigué el interior cx_Oracle para encontrar lo que estaba mal.

Resulta que una serie de argumentos y métodos sólo están disponibles a través de algunas banderas:

  • Activa WITH_UNICODE encoding y nencoding atributos
  • ORACLE_10G activa action, module, clientinfo y current_schema

he comprobado y descubrió que había compilado cx_Oracle contra la versión 9 del cliente de Oracle ... así que recompilado con la versión 10.2.0.3 del cliente de Oracle y ahora tengo acceso a estos atributos.

La vergüenza que la restricción no se precisó en la documentación ... y estoy muy agradecido de que el código fuente está disponible.

Otros consejos

Trate de volver a instalar cx_Oracle. Su cx_Oracle está probablemente en mal estado. ¿Cuál es su versión del sistema operativo y Python?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top