Domanda

Bene, spero che questo non è un duplicato, la ricerca non ha dato niente di utile.

Ho accarezzato cx_Oracle negli ultimi giorni, l'installazione e l'utilizzo. Tutto è andato bene fino a quando ho raggiunto il mio problema attuale: Vorrei cambiare il mio schema. Se dovessi usare un semplice sqlplus 'alter session set current_schema = toto;' farei, ma non so come muoversi con cx_Oracle.

Ho scaricato l'ultima versione di origine:. Cx_Oracle-5.0.2.tar.gz

Secondo il documentazione cambiamento di schema è un semplice caso di impostazione Connection.current_schema che dovrebbe essere un attributo di lettura-scrittura ... il problema è il mio oggetto Connection non ha qualsiasi attributo 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']

Il tentativo di impostare l'attributo utilizzando

>>> c.current_schema = 'toto'

genera un errore ... __setattr__ è stato apparentemente ignorato per impedirlo.

Quindi ... qualcuno sa come?


Qui è l'errore che ho ottenuto.

>>> 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 qui ci sono le informazioni sul sistema operativo e pitone:

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

E io uso Python 2.6.2 (compilato per 64bits)

Ho anche compilato cx_Oracle per 64bits, sulla stessa macchina.

È stato utile?

Soluzione

Va bene, ho finalmente, dopo tanto cercare ed errori, seguito il suggerimento fn e indagato all'interno cx_Oracle per trovare ciò che è sbagliato.

Si scopre che un certo numero di argomenti e metodi sono disponibili solo tramite alcune bandiere:

  • WITH_UNICODE Attiva encoding e nencoding attributi
  • ORACLE_10G attiva action, module, clientinfo e current_schema

Ho controllato e scoperto che avevo compilato cx_Oracle contro la versione 9 del client Oracle ... così ho ricompilato con la versione 10.2.0.3 del client Oracle e ora avere accesso a questi attributi.

Peccato che la restrizione non è stato precisato nella documentazione ... e sono molto grato che il codice sorgente è disponibile.

Altri suggerimenti

Prova a reinstallare cx_Oracle. Il tuo cx_Oracle probabilmente incasinato. Qual è la tua versione del sistema operativo e pitone?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top