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.

War es hilfreich?

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 aktiviert encoding und nencoding Attribute
  • ORACLE_10G aktiviert action, module, clientinfo und current_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?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top