[Python3] Herstellen einer Verbindung zur Oracle-Datenbank und Ausführen von SQL [cx_Oracle]

Einführung

Wir haben zusammengefasst, wie das cx_Oracle-Paket in Python3 verwendet wird. Ich denke, wir können damit etwas entwickeln.

Es ist wichtig, zuerst zu sagen, aber es ist am besten, die offizielle Dokumentation zu lesen. Offizielles Dokument von cx_Oracle

Systemkonfiguration

Paketinstallation

PowerShell


pip install cx_Oracle

** Wenn ein Fehler auftritt ** Da Windows standardmäßig nicht mit einem C-Compiler geliefert wird, kann bei der Installation mit pip ein Fehler mit der folgenden Meldung auftreten.

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

In diesem Fall müssen Sie "Build Tools for Visual Studio 2019" auf der Downloadseite von Visual Studio installieren. (Stand 23. November 2019) VC++.png [Erforderliche Mindestkonfiguration] Arbeitsbelastung ・ C ++ Build Tools Optional ・ MSVC v142 - VS 2019 C ++ x64 / x86-Build-Tool ・ Windows 10 SDK

Verbindung zur Datenbank herstellen

connect.py


#Paketimport
import cx_Oracle

HOST = "localhost"
PORT = 1521
SVC_NM = "hoge.example.com"

#Verbindungsdeskriptor generieren
dsn = cx_Oracle.makedsn(HOST, PORT, service_name = SVC_NM)

#Verbindung herstellen
connection = cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8")

#Verarbeitung wie SQL-Ausgabe...

#Lösen Sie die Verbindung
connection.close()

Paketimport

import cx_Oracle

Verbindungsdeskriptor generieren

HOST = "localhost"
PORT = 1521

# SID(Instanzkennung)Beim Benutzen
SID = "hoge"
dsn = cx_Oracle.makedsn(HOST, PORT, sid = SID)

# SERVICE_NAME(Dienstname)Beim Benutzen
SVC_NM = "hoge.example.com"
dsn = cx_Oracle.makedsn(HOST, PORT, service_name = SVC_NM)

# NET_SERVICE_NAME(Netzdienstname, Verbindungskennung)Beim Benutzen
NET_SN = "hogenet"
dsn = cx_Oracle.makedsn(HOST, PORT, NET_SN)

#Generierter Verbindungsdeskriptor(Beispiel: SERVICE_NAME)
print(dsn)
# >> (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hoge.example.com)))

cx_Oracle.makedsn() Gibt die Verbindungskennung basierend auf den im Argument übergebenen Parametern zurück.

** * Bei Verwendung des Netzdienstnamens (Verbindungskennung) ** Es ist erforderlich, tnsnames.ora auf der Clientseite im Voraus zu konfigurieren.

Verbindungen herstellen und freigeben

#Verbindung herstellen
connection = cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8")

#Verarbeitung wie SQL-Ausgabe...

#Lösen Sie die Verbindung
connection.close()

Sie können die with-Syntax verwenden, um eine Verbindung automatisch freizugeben, wenn Sie den with-Block verlassen. Sofern es keinen besonderen Grund gibt, denke ich persönlich, dass dies besser ist.

with cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8") as connection:
    #Verarbeitung wie SQL-Ausgabe...
    # connection.close()Keine Notwendigkeit zu beschreiben

SQL-Ausführung

query.py


#Cursorgenerierung
cursor = connection.cursor()

#Bindungsvariable
sql = "select * from countries where country_id = :id"
bind_data = { id: 1 }

#SQL-Ausgabe
cursor.execute(sql, bind_data)

#Datenerfassung
rows = cursor.fetchall()

#Ändern Sie den zu bindenden Wert
bind_data["id"] = 2

#SQL-Ausgabe(Weiche Perspektive)
cursor.execute(sql, bind_data)

#Lassen Sie den Cursor los
cursor.close()

Cursor generieren und freigeben

#Cursorgenerierung
cursor = connection.cursor()

#Lassen Sie den Cursor los
cursor.close()

Wie eine Verbindung kann sie automatisch mit der with-Syntax freigegeben werden. Sofern Sie keinen bestimmten Grund haben, empfehlen wir dies ebenfalls.

with connection.cursor() as cursor:
    #SQL-Ausgabe usw....
    # cursor.close()Keine Notwendigkeit zu beschreiben

Bindungsvariable

#Bindungsvariable(Platzhalter)
sql = "select country_id, country_name from countries where country_id = :id"

#Definition des zu bindenden Wertes
#Für Wörterbuchtyp
bind_data = { id: 1 }

#Für Listentyp
bind_data = [1]
Wörterbuchtyp Listentyp
Ein Wert, der der Bindevariablen und dem Schlüssel entspricht, wird zugewiesen Die Werte werden ab dem Beginn von SQL in der Reihenfolge der Platzierung der Bindungsvariablen zugewiesen

SQL-Ausgabe

cursor.execute(sql, bind_data)

#Schlüsselwortargumente sind ebenfalls möglich
cursor.execute(sql, id = 1)

#SQL-Neuausgabe durch Ändern des Werts der Bindevariablen
bind_data["id"] = 2
cursor.execute(sql, bind_data)

*** SOFT PARSE * ** Die ausgegebene SQL wird vom Parser analysiert und in einem gemeinsam genutzten Pool (HARD PARSE) zwischengespeichert. Beim Soft-Parsing kann eine Leistungsverbesserung erwartet werden, indem die im gemeinsam genutzten Pool zwischengespeicherten Analyseergebnisse wiederverwendet werden.

Datenerfassung

#Holen Sie sich jeweils einen Datensatz aus dem Cursor
row = cursor.fetchone()
print(row)
# >> (1, Japan)

#Holen Sie sich eine beliebige Anzahl von Datensätzen aus dem Cursor(Beispiel:10 Datensätze)
numRows = 10
rows = cursor.fetchmany(numRows)
print(rows)
# >> [(1, Japan)]

#Holen Sie sich alle Datensätze vom Cursor
rows = cursor.fetchall()
print(rows)
# >> [(1, Japan)]

--Daten werden als Taple aus dem Cursor abgerufen

Transaktion

transaction.py


#Explizite Transaktionsinitiierung
connection.begin()

#SQL-Ausgabe
cursor.execute(
    "insert into countries (country_id, country_name) values (:id, :name))",
    id = 2, name = "United States"
)

#verpflichten
connection.commit()

#zurückrollen
connection.rollback()

Explizite Transaktionsinitiierung

#Optional
connection.begin()

Oracle Database startet automatisch eine Transaktion, wenn das erste SQL ausgeführt wird. Sie müssen eine Transaktion also nicht explizit starten, es sei denn, Sie haben einen bestimmten Grund dafür.

Commit und Rollback

#verpflichten
connection.commit()

#zurückrollen
connection.rollback()

Wenn die Datenbankverbindung ohne Festschreiben geschlossen wird, wird die Transaktion zurückgesetzt.


Klicken Sie hier, um eine Python3-Entwicklungsumgebung zu erstellen! [Python3] Aufbau der Entwicklungsumgebung << Windows Edition >>

Es gibt auch einen Python3-Spickzettel! [Python3] Python-Spickzettel für andere Sprachingenieure << Grundlagen >> [Python3] Python-Spickzettel für andere Sprachingenieure << Objektorientiert >>

Recommended Posts

[Python3] Herstellen einer Verbindung zur Oracle-Datenbank und Ausführen von SQL [cx_Oracle]
[Einführung in cx_Oracle] (Teil 2) Grundlagen zum Verbinden und Trennen mit Oracle Database
[Einführung in cx_Oracle] (Teil 11) Grundlagen der PL / SQL-Ausführung
[Einführung in cx_Oracle] (Teil 6) Zuordnung von DB- und Python-Datentypen
Ein Python-Skript, das Oracle-Datenbankdaten in CSV konvertiert
Beispiel für die Erstellung einer Python-Umgebung und eine SQL-Ausführung für DB und ein Memo der grundlegenden Verarbeitung für Statistiken 2019
Python 3.6 unter Windows ... und zu Xamarin.
[Python] Drücken Sie Keras von TensorFlow und TensorFlow von c ++, um die Ausführung zu beschleunigen.
[Einführung in Python3 Tag 1] Programmierung und Python
Verarbeiten Sie das Ausführungsergebnis von Splunk mit Python und speichern Sie es in einer Datei
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
Python (vom ersten Mal bis zur Ausführung)
Python-Protokollierung und Dump an JSON
Selen und Python zum Öffnen von Google
Datenbanktabellen mit CSV extrahieren [ODBC-Verbindung von R und Python]
So erstellen Sie eine Python- und Jupyter-Ausführungsumgebung mit VSCode
Verbinden Sie Ihre SQL Server-Datenbank mit Python mit Alibaba Cloud Function Compute
Von Python bis zur Verwendung von MeCab (und CaboCha)
So installieren und verwenden Sie pandas_datareader [Python]
Binden Sie Methoden an Python-Klassen und -Instanzen
Fraktal zum Erstellen und Spielen mit Python
Portieren und Ändern des Doublet-Solvers von Python2 auf Python3.
Lesen Sie Python csv und exportieren Sie es nach txt
Python: Verwendung von Einheimischen () und Globalen ()
[Python] Berechnen von MAE und RMSE
Verwendung von Python zip und Aufzählung
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Verwendung ist und == in Python
(Tagebuch 1) Erstellen, Durchsuchen und Registrieren von Daten in der SQL-Datenbank des Microsoft Azure-Dienstes mit Python
[Einführung in cx_Oracle] (Teil 9) Zuordnung von DB- und Python-Datentypen (Version 8 oder höher)
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
So generieren Sie eine Sequenz in Python und C ++
[Einführung in Python3 Tag 12] Kapitel 6 Objekte und Klassen (6.3-6.15)
ODBC-Verbindung zu FileMaker 11 Server Advanced mit Python 3
Bildtext und Post to Slack (Python Slackbot)
Verwendung von Python Kivy ④ ~ Ausführung unter Android ~
Beenden Sie die Python-Ausführung mit Strg-C (reagiert auf SIGINT)
Ein Skript, das eine FlatBuffers-Binärdatei aus einer SQL-Datenbank erstellt
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
[Einführung in Python3, Tag 22] Kapitel 11 Parallele Verarbeitung und Vernetzung (11.1 bis 11.3)
Senden Sie eine Nachricht an Skype und Chatwork in Python
[Einführung in die Udemy Python3 + -Anwendung] 64. Namespace und Gültigkeitsbereich
[Einführung in Python3 Tag 11] Kapitel 6 Objekte und Klassen (6.1-6.2)
So messen Sie die Ausführungszeit mit Python Teil 1
Fehler und Abschluss der Ausführung durch LINE [Python] benachrichtigen
[Python] Verwendung von Hash-Funktion und Taple.
Einführung in Python "Re" 1 Erstellen einer Ausführungsumgebung
Liste des zu verschiebenden und zu merkenden Python-Codes
Zur Darstellung von Datum, Uhrzeit, Uhrzeit und Sekunden in Python
Wie man Autokorrelation und partielle Autokorrelation mit Python zeichnet
So messen Sie die Ausführungszeit mit Python Part 2
Geben Sie für jede Datei die angegebene Tabelle der Oracle-Datenbank in Python in Excel aus
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben