Question

J'espère que ce n'est pas un doublon, la recherche n'a donné quelque chose d'utile.

Je suis en train de jouer avec cx_Oracle depuis quelques jours, l'installation et l'utiliser. Tout allait bien jusqu'à ce que je suis arrivé à mon problème actuel: Je voudrais changer mon schéma. Si j'utilisais sqlplus simple alter set session current_schema = toto; ' FERAIENT, mais je ne sais pas comment se déplacer avec cx_Oracle.

Je l'ai téléchargé la dernière version source. Cx_Oracle-5.0.2.tar.gz

Selon la documentation changement de schéma est un simple cas de réglage Connection.current_schema qui devrait être un attribut de lecture-écriture ... le problème est mon objet Connection n'a aucun attribut 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']

En essayant de définir l'attribut avec

>>> c.current_schema = 'toto'

provoque une erreur ... __setattr__ a apparemment été écarté pour l'empêcher.

Alors ... personne ne sait comment?


Voici l'erreur que je suis arrivé.

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

Et voici les informations sur OS et python:

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

Et j'utilise python 2.6.2 (compilé pour 64bits)

J'ai aussi compilé cx_Oracle pour 64bits, sur la même machine.

Était-ce utile?

La solution

D'accord, je enfin, après beaucoup d'essayer et d'erreurs, suivi la suggestion fn et à l'intérieur étudié cx_Oracle pour trouver ce qui était faux.

Il se trouve qu'un certain nombre d'arguments et les méthodes ne sont disponibles que par quelques drapeaux:

  • WITH_UNICODE active les attributs encoding et nencoding
  • ORACLE_10G active action, module, clientinfo et current_schema

J'ai vérifié et découvert que j'avais compilé cx_Oracle contre la version 9 du client oracle ... donc je recompilé contre la version 10.2.0.3 du client Oracle et maintenant j'avoir accès à ces attributs.

Dommage que la restriction n'a pas été précisé dans la documentation ... et je suis très reconnaissant que le code source est disponible.

Autres conseils

Essayez de réinstaller cx_Oracle. Votre cx_Oracle est probablement foiré. Quelle est votre OS et la version python?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top