Oracle
 sql >> Base de données >  >> RDS >> Oracle

Comment puis-je accéder à Oracle à partir de Python ?

Voici ce qui a fonctionné pour moi. Mes versions Python et Oracle sont légèrement différentes des vôtres, mais la même approche devrait s'appliquer. Assurez-vous simplement que la version du programme d'installation binaire cx_Oracle correspond à vos versions client Oracle et Python.

Mes versions :

  • Python 2.7
  • Oracle Instant Client 11G R2
  • cx_Oracle 5.0.4 (Unicode, Python 2.7, Oracle 11G)
  • Windows XP SP3

Étapes :

  1. Téléchargez le package Oracle Instant Client. J'ai utilisé instantclient-basic-win32-11.2.0.1.0.zip. Décompressez-le dans C:\votre\chemin\vers\instantclient_11_2
  2. Téléchargez et exécutez le programme d'installation binaire cx_Oracle. J'ai utilisé cx_Oracle-5.0.4-11g-unicode.win32-py2.7.msi. Je l'ai installé pour tous les utilisateurs et je l'ai pointé vers l'emplacement Python 2.7 qu'il a trouvé dans le registre.
  3. Définissez les variables d'environnement ORACLE_HOME et PATH via un script batch ou tout autre mécanisme logique dans le contexte de votre application, afin qu'elles pointent vers le répertoire Oracle Instant Client. Voir la source oracle_python.bat ci-dessous. Je suis sûr qu'il doit y avoir une solution plus élégante pour cela, mais je voulais limiter autant que possible mes modifications à l'échelle du système. Assurez-vous de placer le répertoire Oracle Instant Client ciblé au début du PATH (ou au moins avant tout autre répertoire client Oracle). Pour l'instant, je ne fais que des choses en ligne de commande, donc je lance simplement oracle_python.bat dans le shell avant d'exécuter tout programme nécessitant cx_Oracle.
  4. Exécutez regedit et vérifiez si une clé NLS_LANG est définie sur \HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE. Si c'est le cas, renommez la clé (je l'ai changée en NLS_LANG_OLD) ou supprimez-la. Cette clé ne doit être utilisée que comme valeur NLS_LANG par défaut pour le client Oracle 7, vous pouvez donc la supprimer en toute sécurité, sauf si vous utilisez le client Oracle 7 ailleurs. Comme toujours, assurez-vous de sauvegarder votre registre avant d'apporter des modifications.
  5. Maintenant, vous devriez pouvoir importer cx_Oracle dans votre programme Python. Voir la source oracle_test.py ci-dessous. Notez que j'ai dû définir la connexion et les chaînes SQL sur Unicode pour ma version de cx_Oracle.

Source :oracle_python.bat

@echo off
set ORACLE_HOME=C:\your\path\to\instantclient_11_2
set PATH=%ORACLE_HOME%;%PATH%

Source :oracle_test.py

import cx_Oracle

conn_str = u'user/[email protected]:port/service'
conn = cx_Oracle.connect(conn_str)
c = conn.cursor()
c.execute(u'select your_col_1, your_col_2 from your_table')
for row in c:
    print row[0], "-", row[1]
conn.close()

Problèmes possibles :

  • "ORA-12705 :Impossible d'accéder aux fichiers de données NLS ou à l'environnement non valide spécifié" :j'ai rencontré ce problème avant de modifier le registre NLS_LANG.
  • "TypeError :argument 1 must be unicode, not str" - si vous devez définir la chaîne de connexion sur Unicode.
  • "TypeError :expecting None or a string" - si vous devez définir la chaîne SQL sur Unicode.
  • "ImportError :Échec du chargement de la DLL :la procédure spécifiée est introuvable." - peut indiquer que cx_Oracle ne trouve pas la DLL client Oracle appropriée.