Heim >Backend-Entwicklung >Python-Tutorial >Detaillierte Einführung in die Installation und Verwendung des Python cx_Oracle-Moduls

Detaillierte Einführung in die Installation und Verwendung des Python cx_Oracle-Moduls

高洛峰
高洛峰Original
2017-02-13 13:51:001694Durchsuche

Installation des Python cx_Oracle-Moduls

Kürzlich muss ich ein Datenmigrationsskript schreiben, um die Daten in einem einzelnen Oracle in den MySQL Sharding-Cluster zu migrieren. Die Installation von cx_Oracle unter Linux ist etwas mühsam es heraus und machen Sie eine Zusammenfassung.

Für den Oracle-Client müssen Sie nicht nur das entsprechende Python-Modul installieren (hier habe ich das offizielle Python-Modul von Oracle verwendet – cx_Oracle), sondern auch den Oracle-Client installieren. und Sie müssen es auch tnsnames.ora konfigurieren (natürlich kann es auch einfach über host:port/schema aufgerufen werden).

Installation:

1. Ermitteln Sie zunächst die Version. Da unsere Oracle-Daten etwas alt sind, habe ich mich für eine ältere Version entschieden – Oracle Instant Client 10.2.0.4.

2. Laden Sie Instantclient-Basic herunter. Download-Adresse: http://www.oracle.com/technetwork/database/features/instant-client/index-097480.html. . Das ist ein ernstzunehmender Schwachsinn gegen Oracle. Sie müssen sich registrieren, bevor Sie es herunterladen können. Der Schlüssel ist, dass das Passwort bei der Registrierung tatsächlich Zahlen und Buchstaben erfordert und dass diese in Groß- und Kleinbuchstaben geschrieben sein müssen mindestens 8 Zeichen. Es zwang mich, mir ein Passwort zu besorgen, das sicherer ist als mein Bankpasswort (naja, jetzt habe ich vergessen, was ich eingegeben habe ...) und einfach Basic herunterzuladen.

$wget http://download.oracle.com/otn/linux/instantclient/10204/basic-10.2.0.4.0-linux-x86_64.zip

3. Installationskonfiguration

$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

4. TNS-Namen konfigurieren .ora (tns muss nicht konfiguriert werden)

Beachten Sie, dass tnsnames.ora nicht wirklich existiert, Sie müssen es selbst erstellen (das ist auch ekelhaft, ich dachte zuerst, ich müsste etwas installieren). .), Ich habe diese Methode nicht verwendet, Interessenten können sie googeln.

5. Laden Sie das cx_Oracle-Python-Modul herunter und installieren Sie es

$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的位置,也可能在其他地方,自己找一下吧

6. Überprüfung und Problemlösung

$python
>>import cx_Oracle

Wenn ein Fehler gemeldet wird: import cx_Oracle gab ImportError: libclntsh.so.10.1: Shared Object File kann nicht geöffnet werden: Keine solche Datei oder kein solches Verzeichnis

bedeutet, dass die Wenn die dynamische Bibliothek des Instant-Clients nicht gefunden wurde, prüfen Sie, ob die Umgebungsvariablen konfiguriert sind, ob sie wirksam sind und ob die Version korrekt ist.

Wenn ein Fehler gemeldet wird: ImportError: ./cx_Oracle.so: undefiniertes Symbol: 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

Also Python neu kompilieren

$./configure --prefix=/usr/local/python2.6.5 --enable-shared -enable-unicode=ucs4
$make;make install

Erneut überprüft und schließlich war der Import normal.

Verwendung:

1. Basisverbindung – unter Verwendung des Oracle TNS-Alias ​​

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)

2. Benutzer Geben Sie das Passwort ein, um eine Verbindung herzustellen

pwd =getpass.getpass()
connection =cx_Oracle.connect("tp",pwd,"ocn_test")

3. Der Benutzer gibt die Verbindungskontoinformationen direkt in den Python-Befehl ein, beispielsweise im Format python script.py tp/tp@ocn_test

connection =cx_Oracle.connect(sys.argv[1])

4. Verwenden Sie die Easy Connect-Syntax, um über Drive eine Verbindung zur Datenbank herzustellen

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

5. Verwenden Sie zuerst DSN, um TNSNAME zu bilden

tns_name =cx_Oracle.makedsn('10.20.36.19','1521',' ocntest ')
connection =cx_Oracle.connect('tp','tp',tns_name)

6. Melden Sie sich als SYSDBA an

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)

Beim Ausführen von Oracle-Vorgängen auf dem Linux-Server ist ein Fehler aufgetreten:

TNS:listener does not currently know of service requested in connect descriptor

Lösung :

Eine Problemanalyse finden Sie unter http://ora-12514.ora-code.com/. Nach vielen Problemen wurde das Problem schließlich mit der fünften Verbindungsmethode sofort gelöst.

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, vielen Dank für Ihre Unterstützung dieser Website!

Ausführlichere Informationen zur Installation und Verwendung des Python cx_Oracle-Moduls finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn