Introduction détaillée à l'installation et à l'utilisation du module python cx_Oracle

高洛峰
Libérer: 2017-02-13 13:51:00
original
1675 Les gens l'ont consulté

Installation du module python cx_Oracle

Récemment, j'ai besoin d'écrire un script de migration de données pour migrer les données d'un seul Oracle vers le cluster MySQL Sharding. Cela semble un peu gênant d'installer cx_Oracle sous Linux. sortez-le et faites-en un résumé.

Pour le client Oracle, vous devez non seulement installer le module python correspondant (ici j'ai utilisé le module python officiel d'Oracle - cx_Oracle), mais également installer le client Oracle. Généralement, il suffit de choisir Instant Client, et vous devez également le configurer tnsnames.ora (bien sûr, il est également accessible simplement via host:port/schema).

Installation :

1. Déterminez d'abord la version. Parce que nos données Oracle sont un peu anciennes, j'ai choisi une ancienne version : Oracle Instant Client 10.2.0.4.

2. Téléchargez instantclient-basic. Adresse de téléchargement : http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html. . Il s'agit d'un BS sérieux contre Oracle. Vous devez vous inscrire avant de pouvoir le télécharger. La clé est que lors de l'inscription, le mot de passe nécessite des chiffres et des lettres, et les lettres doivent être en majuscules et en minuscules. au moins 8 caractères. Cela m'a obligé à obtenir un mot de passe plus sécurisé que mon mot de passe bancaire (enfin, maintenant j'ai oublié ce que j'ai renseigné...), et à télécharger simplement le basique.

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip
Copier après la connexion

3. Configuration de l'installation

$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cd instantclient_10_2
$cp * /usr/lib  #直接放到动态库搜索路径中,不需要额外的环境配置

或
$unzip instantclient-basic-linux.x64-10.2.0.4.0.zip
$cp -rf instantclient_10_2 /opt/
$vi /etc/profile
   export ORACLE_HOME=/opt/instantclient_10_2
   export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME

$source /etc/profile
Copier après la connexion

4. .ora (tns n'a pas besoin d'être configuré)

Notez que tnsnames.ora n'existe pas réellement, vous devez le créer vous-même (c'est aussi dégoûtant, j'ai pensé au début que je devais installer quelque chose.. .), je ne l'ai pas fait. En utilisant cette méthode, ceux qui sont intéressés peuvent la rechercher sur Google.

5. Téléchargez et installez le module python cx_Oracle

$wget http://downloads.sourceforge.net/project/cx-oracle/5.1.2/cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm
$rpm -ivh cx_Oracle-5.1.2-10g-py26-1.x86_64.rpm 
$ls /usr/lib/python2.6/site-packages/cx_Oracle.so #有这个文件表示安装成功,根据python的位置,也可能在其他地方,自己找一下吧
Copier après la connexion

6. Vérification et résolution de problèmes

$python
>>import cx_Oracle
Copier après la connexion

Si une erreur est signalée : import cx_Oracle a donné ImportError : libclntsh.so.10.1 : impossible d'ouvrir le fichier objet partagé : aucun fichier ou répertoire de ce type

signifie que le La bibliothèque dynamique du client instantané n'a pas été trouvée, vérifiez si les variables d'environnement sont configurées, si elles sont efficaces et si la version est correcte.

Si une erreur est signalée : ImportError : ./cx_Oracle.so : symbole non défini : PyUnicodeUCS4_Decode

Google的信息:There is nothing wrong with Debian. Python supports two incompatible 
 modes of operation for Unicode, UCS2 (the default), and UCS4. Debian uses the default,
 Redhat uses UCS4. You need to recompile the extension for UCS-2 mode
 (i.e. using a Debian installation); this would fix the undefined symbol: PyUnicodeUCS4_Decode
Copier après la connexion

Alors recompilez python

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install
Copier après la connexion

Vérifié à nouveau et finalement l'importation était normale.

Utilisation :

1. Connexion de base – en utilisant l'alias Oracle tns

connection =cx_Oracle.connect("tp/tp@ocn_test")
#查看tns alias命令
cmd>tnsping ocn_test
TNS Ping Utility forLinux: Version 9.2.0.8.0-Production on 27-SEP-201110:47:48
Copyright (c) 1997, 2006, Oracle Corporation. Allrights reserved.
Used parameter files:
/opt/……/sqlnet.ora
Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL =TCP)(HOST =10.20.36.19)(PORT =1520))) (CONNECT_DATA =(SID =ocntest)))
OK (10msec)
Copier après la connexion

2. Utilisateur Saisissez le mot de passe pour vous connecter

pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")
Copier après la connexion

3. L'utilisateur saisit directement les informations du compte de connexion dans la commande Python, au format tel que python script.py tp/tp@ocn_test

connection =cx_Oracle.connect(sys.argv[1])
Copier après la connexion

4. Utilisez la syntaxe Easy Connect pour vous connecter à la base de données via Drive

connection =cx_Oracle.connect('tp','tp','10.20.36.19:1521/ocntest')
#or
connection =cx_Oracle.connect('tp/tp@10.20.36.19:1521/ocntest')
Copier après la connexion

5. Utilisez d'abord DSN pour former TNSNAME

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)
Copier après la connexion

6. >

connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSDBA)
#or as SYSOPER
connection =cx_Oracle.connect('tp/tp@ocn_test', mode=cx_Oracle.SYSOPER)
Copier après la connexion

Une erreur s'est produite lors de l'exécution d'opérations Oracle sur le serveur Linux :

TNS:listener does not currently know of service requested in connect descriptor
Copier après la connexion

Solution :

Pour l'analyse du problème, voir http ://ora-12514.ora-code.com/, après beaucoup de problèmes, en utilisant finalement la cinquième méthode de connexion, le problème a été résolu instantanément.

Merci d'avoir lu, j'espère que cela pourra vous aider, merci pour votre soutien à ce site !

Pour des informations plus détaillées sur l'installation et l'utilisation du module python cx_Oracle, veuillez faire attention au site Web PHP chinois !

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!