La modifica dello schema utilizzando cx_Oracle
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.
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
Attivaencoding
enencoding
attributi -
ORACLE_10G
attivaaction
,module
,clientinfo
ecurrent_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?