Ändern Schema mit cx_Oracle
Frage
Nun, ich hoffe, dass dies kein Duplikat ist, hat die Suche nichts Brauchbares ergeben.
Ich habe mit cx_Oracle
in den letzten paar Tagen wurde liebäugelt, Installation und Verwendung es. Alles ging gut, bis ich mein aktuelles Problem erreicht: Ich möchte mein Schema ändern. Wenn ich sqlplus eine einfache Verwendung wurden ‚Session gesetzt current_schema = toto ändern;‘ Sie würde, aber ich weiß nicht, wie um ihn herum mit cx_Oracle
zu erhalten.
Ich habe die neueste Source-Version heruntergeladen. Cx_Oracle-5.0.2.tar.gz
Nach der Dokumentation von Schema zu ändern ist ein einfacher Fall von Einstellung Connection.current_schema
, die ein Schreib-Lese-Attribut sein sollten ... das Problem ist mein Connection
Objekt hat kein current_schema
Attribut.
>>> 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']
Der Versuch, das Attribut zu setzen mit
>>> c.current_schema = 'toto'
führt zu einem Fehler ... __setattr__
offenbar außer Kraft gesetzt wurde, es zu verhindern.
So ... Wer weiß, wie?
Hier ist der Fehler, den ich habe.
>>> 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
Und hier sind die Informationen über OS und Python:
SUSE LINUX Enterprise Server 9 (x86_64)
VERSION = 9
PATCHLEVEL = 3
Und ich verwende Python 2.6.2 (kompiliert für 64bits)
ich auch cx_Oracle
für 64bits zusammengestellt, auf der gleichen Maschine.
Lösung
Okay, ich schließlich nach viel Versuch und Irrtum, gefolgt fn
Vorschlag und innen cx_Oracle
untersucht um herauszufinden, was falsch war.
Es stellt sich heraus, dass eine Reihe von Argumenten und Methoden nur durch einige Fahnen verfügbar sind:
-
WITH_UNICODE
aktiviertencoding
undnencoding
Attribute -
ORACLE_10G
aktiviertaction
,module
,clientinfo
undcurrent_schema
Ich habe und fand heraus, dass ich cx_Oracle
gegen die Version 9 des Oracle-Client zusammengestellt hatte ... so neu kompiliert ich gegen die Version 10.2.0.3 des Oracle-Client und jetzt habe ich Zugriff auf diese Attribute.
Schade, dass die Beschränkung in der Dokumentation nicht präzisiert wurde ... und ich bin sehr dankbar, dass der Quellcode verfügbar ist.
Andere Tipps
Versuchen cx_Oracle neu zu installieren. Ihre cx_Oracle ist wahrscheinlich vermasselt. Was ist Ihr Betriebssystem und Python-Version?