[PYTHON] [Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge

Überprüfungsumgebung

Ergebnismenge Abrufen

Grundsätzlich wird, wie in Teil 3 erläutert, nach dem Aufrufen der Methode execute () des Cursor-Objekts eine Schleife gegen das Cursor-Objekt ausgeführt. Sie können Datensätze mit abrufen.

sample03b.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                for row in cursor.execute(SQL):
                        print(row)

Andererseits ist auch das Abrufen mit der folgenden Methode möglich, die auf PEP 249 (Python Database API Specification v2.0) basiert.

fetchone() Wie Sie sich aus dem Namen vorstellen können, ist es eine Methode, die nur eine Zeile abruft. Anstatt Zeile für Zeile in einer Schleife abzurufen, wie im folgenden Beispiel select 1+1 from dual Für SELECT-Anweisungen, von denen bekannt ist, dass sie nur eine Zeile zurückgeben, z. B. oder für unten beschriebene scrollbare Cursor.

sample04a.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                cursor.execute(SQL)
                while True:
                    row = cursor.fetchone()
                    if row is None:
                        break
                    print(row)

fetchall() Im Gegensatz zu fetchone () ruft diese Methode alle Zeilen gleichzeitig ab.

sample04b.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                cursor.execute(SQL)
                rows = cursor.fetchall()
                for row in rows:
                    print(row)

fetchmany() Eine Methode, die die Anzahl der im Argument zwischen fetchone () und fetchall () angegebenen Zeilen abruft. Im folgenden Beispiel werden 3 Elemente abgerufen.

sample04c.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                cursor.execute(SQL)
                while True:
                        rows = cursor.fetchmany(3)
                        if not rows:
                                break
                        for row in rows:
                                print(row)

Anpassen der Arraysize

Wenn Sie eine Abrufmethode ausgeben, wird die Anzahl der Abrufe, die Sie abrufen möchten, nicht jedes Mal abgerufen, wenn Sie die einzelnen Methoden ausführen. Die Anzahl der in der Variablen arraysize des Cursor-Objekts angegebenen Elemente (Standard ist 100) wird in den Oracle-Client-Puffer eingelesen, und cx_Oracle wird basierend auf diesem Puffer abgerufen. Dies ist eine Maßnahme zur Reduzierung der Anzahl der Roundtrips zur Datenbank und ein Mechanismus, der in vielen Zugriffstreibern der Oracle-Datenbank bereitgestellt wird und nicht auf cx_Oracle beschränkt ist. Wenn Sie einfach denken, scheint es die höchste Rate zu sein, die mit fetchall () abgerufen werden kann, indem die Arraysize angegeben wird, mit der die geplante Anzahl von Abrufen gleichzeitig abgerufen werden kann. In der Realität ist jedoch selten die Anzahl der Akquisitionen bekannt. Darüber hinaus muss die Arraysize auf einen Wert festgelegt werden, der diese berücksichtigt, da sie Einschränkungen wie der Verarbeitungsleistung und dem SQL-Gewicht der Serverseite, der Menge an CPU-Auslastung und Speicher, die von der Anwendung verwendet werden können, und der Netzwerkbandbreite unterliegt. .. Das Folgende ist ein Beispiel für die Ausgabe von SQL mit der Arraysize 1000. Ich versuche, mit fetchmany () dieselbe Nummer wie Arraysize abzurufen.

sample04d.py(Auszug)


with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor() as cursor:
                cursor.arraysize = 1000
                cursor.execute(SQL)
                while True:
                        rows = cursor.fetchmany(cursor.arraysize)
                        if not rows:
                                break
                        for row in rows:
                                print(row)

Ergebnismenge scrollen

Normalerweise geht das Abrufen nur rückwärts. Auf der anderen Seite implementiert cx_Oracle einen scrollbaren Cursor, mit dem jeder Datensatz, einschließlich der Vorderseite, seine aktuelle Position ändern kann. Um einen scrollbaren Cursor zu verwenden, muss das scrollbare Argument beim Erstellen des Cursor-Objekts auf True gesetzt werden. Verwenden Sie die scroll () -Methode, um den Cursor zu scrollen. Diese Methode hat ein Argument namens value und ein Argument namens mode. Die Bedeutung des Wertarguments ändert sich abhängig von dem im Argument mode angegebenen Wert. Unten finden Sie eine Liste der Aktionen, die basierend auf dem Argument mode ausgeführt werden können.

Der Wert des Modusarguments Bedeutung und Bewegung des Wertarguments
first Scrollen Sie zur ersten Zeile.
Das Wertargument wird ignoriert.
last Scrollen Sie zur letzten Zeile.
Das Wertargument wird ignoriert.
absolute Verschiebt sich zu der im Werteargument angegebenen Anzahl von Zeilen.
relative Der Standardwert für das Modusargument.
Verschiebt die Anzahl der im Wertargument angegebenen Zeilen.
Geben Sie einen negativen Wert an, der zurückgegeben werden soll.

Unten ist ein Beispiel. Beachten Sie, dass scrollbare Cursor eine höhere Last als normale Cursor haben. Verwenden Sie sie daher nur, wenn dies erforderlich ist.

sample04e.py


import cx_Oracle

USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
         select object_id - 1, owner, object_name, object_type
          from all_objects
         order by object_id
         fetch first 10 rows only
"""

with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
        with connection.cursor(scrollable=True) as cursor:
                cursor.execute(SQL)
                print("********Alle 10 Zeilen anzeigen********")
                for row in cursor:
                        print(row)
                print("********Erste Zeile anzeigen(Wertargument wird ignoriert) ********")
                cursor.scroll(8, "first")
                print(cursor.fetchone())
                print("********Letzte Zeile anzeigen********")
                cursor.scroll(mode="last")
                print(cursor.fetchone())
                print("********3. Zeile anzeigen********")
                cursor.scroll(3, "absolute")
                print(cursor.fetchone())
                print("********Nach 4 Zeilen anzeigen********")
                cursor.scroll(4)
                print(cursor.fetchone())
                print("********2 Zeilen vorher anzeigen********")
                cursor.scroll(-2, "relative")
                print(cursor.fetchone())
$ python sample04e.py
********Alle 10 Zeilen anzeigen********
(1, 'SYS', 'C_OBJ#', 'CLUSTER')
(2, 'SYS', 'I_OBJ#', 'INDEX')
(3, 'SYS', 'TAB$', 'TABLE')
(4, 'SYS', 'CLU$', 'TABLE')
(5, 'SYS', 'C_TS#', 'CLUSTER')
(6, 'SYS', 'I_TS#', 'INDEX')
(7, 'SYS', 'C_FILE#_BLOCK#', 'CLUSTER')
(8, 'SYS', 'I_FILE#_BLOCK#', 'INDEX')
(9, 'SYS', 'C_USER#', 'CLUSTER')
(10, 'SYS', 'I_USER#', 'INDEX')
********Erste Zeile anzeigen(Wertargument wird ignoriert) ********
(1, 'SYS', 'C_OBJ#', 'CLUSTER')
********Letzte Zeile anzeigen********
(10, 'SYS', 'I_USER#', 'INDEX')
********3. Zeile anzeigen********
(3, 'SYS', 'TAB$', 'TABLE')
********Nach 4 Zeilen anzeigen********
(7, 'SYS', 'C_FILE#_BLOCK#', 'CLUSTER')
********2 Zeilen vorher anzeigen********
(5, 'SYS', 'C_TS#', 'CLUSTER')

Recommended Posts

[Einführung in cx_Oracle] (Teil 4) Abrufen und Scrollen der Ergebnismenge
[Einführung in cx_Oracle] (Teil 2) Grundlagen zum Verbinden und Trennen mit Oracle Database
[Cx_Oracle Primer] (Teil 3) Grundlagen zum Durchsuchen von Tabellen
[Einführung in cx_Oracle] (Teil 7) Umgang mit Bindevariablen
[Einführung in cx_Oracle] Übersicht über cx_Oracle
[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
[Einführung in cx_Oracle] (16.) Umgang mit LOB-Typen
[Einführung in cx_Oracle] (5.) Umgang mit japanischen Daten
[Einführung in cx_Oracle] (Teil 9) Zuordnung von DB- und Python-Datentypen (Version 8 oder höher)
[Einführung in cx_Oracle] (15.) Erstellen einer Ergebnismenge in einem anderen Format als tapple
Einführung in PyQt4 Teil 1
[Einführung in cx_Oracle] (13.) Verbindung über Verbindungspool (Client-Seite)
[Einführung in cx_Oracle] (10.) Aktualisieren Sie die DML-Anweisung und die DDL / DCL-Anweisung
[Einführung in Scipy] Berechnung der Lorenzkurve und des Gini-Koeffizienten ♬
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Maschinelles Lernen mit Nogisaka 46 und Keyakizaka 46 Teil 1 Einführung
Einführung von DataLiner Version 1.3 und Verwendung von Union Append
[Einführung in cx_Oracle] (8.) Version cx_Oracle 8.0
Einführung in Ansible Teil In'Inventory '
Serie: Einführung in den Inhalt von cx_Oracle
Einführung und Tipps von mlflow.Tracking
Einführung in Ansible Teil ④'Variable '
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part1-
[Einführung in Python] Ich habe die Namenskonventionen von C # und Python verglichen.
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part2-
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part4-
[Einführung in die Udemy Python3 + -Anwendung] 69. Import des absoluten Pfads und des relativen Pfads
[Einführung in die Udemy Python3 + -Anwendung] 12. Indizieren und Schneiden von Zeichenketten
Einführung in TensorFlow - Zusammenfassung von vier Regeln und grundlegenden mathematischen Funktionen
Konvertieren Sie das Ergebnis von Python Optparse, um es zu diktieren und zu verwenden
[Einführung in das SIR-Modell] Betrachten Sie das passende Ergebnis von Diamond Princess ♬
Lösen der Einführung von AOJ in Algorithmen und Datenstrukturen in Python -Part3-
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
Einführung in Ansible Teil 2 'Grundlegende Grammatik'
[Einführung in Python3 Tag 1] Programmierung und Python
Einführung und Implementierung der Aktivierungsfunktion
Einführung in Python Hands On Teil 1
Einführung in Ansible Teil 1'Hallo Welt !! '
Einführung und Verwendung der Python-Flasche ・ Versuchen Sie, einen einfachen Webserver mit Anmeldefunktion einzurichten
[Einführung in Datenwissenschaftler] Grundlagen der Wahrscheinlichkeit und Statistik ♬ Wahrscheinlichkeits- / Wahrscheinlichkeitsvariable und Wahrscheinlichkeitsverteilung
Einführung des Cyber-Sicherheits-Frameworks "MITRE CALDERA": Verwendung und Schulung
Einführung in Deep Learning ~ Falten und Pooling ~
Web-WF Python Tornado Teil 3 (Einführung in Openpyexcel)
[Einführung in cx_Oracle] (12.) DB-Ausnahmebehandlung
[Einführung in cx_Oracle] (17.) Datumsbehandlung
[Einführung in AWS] Text-Voice-Konvertierung und Wiedergabe ♪
Einfache Einführung in die Python3-Serie und OpenCV3
[Einführung in die Udemy Python3 + -Anwendung] 29. Methode festlegen
Einführung in Scapy ① (Von der Installation bis zur Ausführung von Scapy)
[Einführung in Data Scientist] Grundlagen von Python ♬
Kaggle: Einführung in das manuelle Feature Engineering Teil 1
[GKE] Setzen Sie die Bereitstellungsreplikate auf 0 und benachrichtigen Sie die Go-App über das Betriebssystemsignal SIGTERM
Verwenden Sie Pillow, um das Bild transparent zu machen und nur einen Teil davon zu überlagern