Um SQL-Anweisungen auszugeben, die nicht auf SELECT beschränkt sind, müssen Sie zuerst ein Curosr-Objekt in der folgenden Form erstellen.
cursor = connection.cursor()
Fahren Sie zum Beispiel fort
cursor.execute("select sysdate from dual")
Rufen Sie mit der Anweisung SELECT als Argument die Methode execute () des Curosr-Objekts auf. Durch Schleifen des Aufrufergebnisses mit einer for-Anweisung wird der Datensatz in Form eines Taples abgerufen. Schließlich das Curosr-Objekt
cursor.close()
Schließen mit. Unten finden Sie ein Ausführungsbeispiel. Da die Ansicht ALL_OBJECTS in der Reihenfolge OBJECT_ID abgerufen wird, funktioniert sie ohne besondere Vorbereitung, wenn Sie Erfahrung mit der Ausführung der Anwendung cx_Oracle haben.
sample03a.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
select object_id, owner, object_name, object_type
from all_objects
order by object_id
fetch first 5 rows only
"""
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
cursor = connection.cursor()
cursor.execute(SQL)
for row in cursor:
print(row)
cursor.close()
In meiner Umgebung ist die Ausgabe wie folgt.
$ python sample03a.py
(2, 'SYS', 'C_OBJ#', 'CLUSTER')
(3, 'SYS', 'I_OBJ#', 'INDEX')
(4, 'SYS', 'TAB$', 'TABLE')
(5, 'SYS', 'CLU$', 'TABLE')
(6, 'SYS', 'C_TS#', 'CLUSTER')
Im obigen Beispiel wird die with-Syntax nur für das Connection-Objekt verwendet, das Curosr-Objekt unterstützt jedoch auch die with-Syntax. Wenn Sie also die letzten 6 Zeilen des obigen Beispiels wie folgt umschreiben, ist dies eine sicherere Codierung mit einer einfacheren Beschreibungsmenge und weniger Problemen wie einer unzureichenden Anzahl von Cursorn (ORA-1000). Als Bonus habe ich auch den SQL-Ausgabe-Teil gekürzt.
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)
Wenn Sie die Ergebnismenge als Liste behandeln möchten, können Sie die Listeneinschlussnotation auch wie folgt verwenden. Abhängig von der Umgebung muss das pprint-Modul vorinstalliert sein, um das folgende Beispiel auszuführen.
sample03c.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import cx_Oracle
import pprint
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL = """
select object_id, owner, object_name, object_type
from all_objects
order by object_id
fetch first 5 rows only
"""
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
pprint.pprint([f"{r[1]}.{r[2]}Ist{r[3]}(ID:{r[0]})ist" for r in cursor.execute(SQL)])
$ python sample03c.py
['SYS.C_OBJ#Ist CLUSTER(ID:2)ist',
'SYS.I_OBJ#Ist INDEX(ID:3)ist',
'SYS.TAB$Ist TABELLE(ID:4)ist',
'SYS.CLU$Ist TABELLE(ID:5)ist',
'SYS.C_TS#Ist CLUSTER(ID:6)ist']
Recommended Posts