Immer häufiger tritt die Frage auf, kann man Python in Verbindung mit der Oracle Datenbank verwenden. Was muss man dafür tun? Um zu zeigen wie einfach man mit Python und der Oracle Datenbank arbeiten kann, zeige ich in den folgenden Abschnitten die ersten Schritte, die dazu erforderlich sind.
In diesem Zusammenhang ein Hinweis und Tipp von mir: Bevor man mit einem komplexen Python Programm eine Lösung implementiert, sollte man vorab prüfen, ob es keine Funktion oder Technologie in der Oracle Datenbank gibt, die das Programmieren stark vereinfacht. Die Oracle Datenbank stellt sehr viele Funktionen zur Verfügung um zum Beispiel JSON oder XML zu verarbeiten, Konvertierungen von XML nach JSON durchzuführen oder gar eine HTTP Adresse auszulesen. Beispiele dazu finden Sie auch in unserer Kategorie SQL und PL/SQL Tipps.
Wie startet man nun mit Python?
Das Oracle Python Developer Center ist ein guter Einstieg in das Thema. Hier findet man auch ein kurzes 5 minütiges Starter Video um Python für Oracle Database unter Linux zu verwenden.
Folgendes Bild zeigt wie Python mit der Oracle Datenbank verwendet wird. Python liest die .py-Skripte und ruft cx_Oracle-Methoden auf. Der Import bindet dann die cx_Oracle-Schnittstelle ein, die Bestandteil des Oracle-Client ist. Die Client Bibliotheken stellen dann die Verbindung mit der Datenbank her, die sich sowohl in der Cloud als auch On-Premises befinden kann.
Update 2025:
cx_Oracle was obsoleted by python-oracledb in 2022,
python-oracledb uses the same Python DB API as cx_Oracle, and has many new features.
Follow the python-oracledb installation instructions to start using the upgrade today.
Wie stelle ich nun in meiner Python Umgebung diese Oracle Schnittstelle zur Verfügung?
3 Schritten sind dazu erforderlich. Am Beispiel Windows schaut die Installation folgendermaßen aus.
- Installation von Python Version 2.7 oder Version 3.5-3.7 über python.org
PS …> python -V
Python 3.7.4
- Installation von cx_Oracle (z.B. Version 7.2) unter https://oracle.github.io/python-cx_Oracle/
….>python -m pip install cx_Oracle
Collecting cx_Oracle
Downloading https://files.pythonhosted.org/packages/27/d3/95d3db458abd27701afc7…
Oracle-7.2.2-cp37-cp37m-win_amd64.whl (187kB)
100% |████████████████████████████████| 194kB 4.4MB/s
Installing collected packages: cx-Oracle
Successfully installed cx-Oracle-7.2.2
You are using pip version 19.0.3, however version 19.2.3 is available.
You should consider upgrading via the 'python -m pip install –upgrade pip' command.
- Installation von Oracle Instant Client
Dazu ist nur ein Download des Basic Package und ein Unzip erforderlich. Und schon kann es losgehen!
Bevor wir einen einfachen Connect mit einer Datenbank herstellen, müssen wir sicherstellen dass die Instant Client Libraries in der PATH Variable enthalten ist. In der Powershell sieht das Kommando dann folgendermassen aus.
$env:PATH+=";c:\users\uschwinn\instantclient_19_3"
Im ersten Beispiel verbinde ich mich mit einer Datenbank on-Premise über einen Easy Connect String. Dazu sind Angaben zu Host, Port und Servicenamen erforderlich. Es wird die Datenbankversion ausgegeben.
import cx_Oracle
db_connection_string = 'username/passwort@hostname.de.oracle.com:1521/servicename'
con = cx_Oracle.connect(db_connection_string)
print("Database version:", con.version)
con.close()
Das Ergebnis sieht dann in meinem Fall folgendermaßen aus:
PS …> python c:/users/uschwinn/downloads/version.py
Database version: 19.4.0.0.0
Hinweis: Bitte vergessen Sie nicht die Connection mit close() zu schließen.
Möchte man sich mit einer Autonomous Datenbank in der Oracle Cloud verbinden, benötigt man die passende Wallet Datei- im Zip- Format, die einen Zugriff auf die Datenbank erlaubt. Die Zip Datei enthält unter anderem eine tnsnames.ora Datei.
Die tnsnames.ora Datei wird dann über die TNS_ADMIN Variable bekannt gegeben:
$env:TNS_ADMIN="C:\data\keys\wallet_dbjun"
Dann sieht das Programm version.py folgendermaßen aus:
import cx_Oracle
db_connection_string = 'username/passwort@servicename'
con = cx_Oracle.connect(db_connection_string)
print("Database version:", con.version)
con.close()
PS …> python c:/users/uschwinn/downloads/version.py
Database version: 18.4.0.0.0
Zum Abschluss soll ein kurzes Beispiel demonstrieren, wie man in der Oracle Datenbank eine Tabelle anlegen und eine Zeile einfügen kann.
import cx_Oracle
# create and populate Oracle objects
db_connection_string = 'username/passwort@servicename'
con = cx_Oracle.connect(db_connection_string)
# create table, if necessary
cursor = con.cursor()
cursor.execute("""
select count(*)
from user_tables
where table_name = 'TEST'""")
count, = cursor.fetchone()
if count == 0:
print("Creating table…")
cursor.execute("""
create table TEST (
i number not null,
j varchar2(200)
)""")
# remove all existing rows and then add a new one
print("Removing any existing rows…")
cursor.execute("delete from test")
print("Adding row to table…")
cursor.execute("insert into test values (1, 'test')")
con.commit()
print("Success!")
Möchte man mehr dazu erfahren, kann man die Dokumentation von cx_oracle auf Github https://oracle.github.io/python-cx_Oracle/index.html finden.Tutorials und eine große Anzahl von Sample Skripts sind unter https://github.com/oracle/python-cx_Oracle/tree/master/samples verfügbar.
Viel Spaß beim Ausprobieren!
