Führen Sie die SQL-Anweisung wie die grundlegende SELECT-Anweisung mit der execute () -Methode des Cursor-Objekts aus. Unten ist ein Beispiel.
sample10a.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL1 = """
create table dept(
deptno number(2,0),
dname varchar2(14),
loc varchar2(13),
constraint pk_dept primary key (deptno)
)
"""
SQL2 = "insert into dept values(10, 'ACCOUNTING', 'NEW YORK')"
SQL3 = "commit"
SQL4 = "select * from dept"
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.execute(SQL1)
cursor.execute(SQL2)
cursor.execute(SQL3)
print(cursor.execute(SQL4).fetchone())
Die Behandlung von Bindevariablen entspricht im Wesentlichen der von 7th. Unten ist ein Beispiel. Es wird angenommen, dass das obige sample10a.py ausgeführt wird.
sample10b.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL1 = "insert into dept values(:deptno, :dname, :loc)"
SQL2 = "commit"
binds = [{"deptno":20, "dname":"RESEARCH", "loc":"DALLAS"},
{"deptno":30, "dname":"SALES", "loc":"CHICAGO"}]
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
cursor.prepare(SQL1)
cursor.executemany(None, binds)
cursor.execute(SQL2)
Die Methode execememany () in der zweiten Zeile von unten führt das PreparedStatement für die Anzahl der Elemente in der Liste des zweiten Parameters aus, wie Sie sich aus der Verwendung vorstellen können.
Der NULL-Wert von DB entspricht None in Python. Wenn Sie NULL speichern möchten, setzen Sie die Bindungsvariable auf Keine. Wenn Sie einen NULL-Wert SELECT auswählen, wird None in der Variablen gespeichert.
Bisher haben wir nur Beispiele für Bindevariablen gesehen, die Werte an SQL übergeben. In der Realität gibt es auch Bindungsvariablen, die von SQL empfangen werden. In diesem Fall können Sie mit der var-Methode des Cursor-Objekts eine Python-Variable erstellen, die als Bindevariable fungiert, die den Wert empfängt. Im Folgenden finden Sie ein Beispiel für die Verwendung von Bindevariablen, die die RETURNING-Klausel erhalten. Es wird angenommen, dass das obige sample10b.py ausgeführt wird.
sample10c.py
import cx_Oracle
USERID = "admin"
PASSWORD = "FooBar"
DESTINATION = "atp1_low"
SQL1 = """
update dept set deptno = deptno + 10 where deptno > 0
returning deptno into :out_deptno
"""
SQL2 = "rollback"
with cx_Oracle.connect(USERID, PASSWORD, DESTINATION) as connection:
with connection.cursor() as cursor:
bind_deptno = cursor.var(int)
cursor.execute(SQL1, out_deptno = bind_deptno)
print(f"DEPTNO = {bind_deptno.getvalue()}")
print(f"RowCount = {cursor.rowcount}")
cursor.execute(SQL2)
Die fünfte Zeile von unten enthält die Definition von Python-Variablen für Bindungsvariablen, die eine Ausgabe von SQL erhalten. Geben Sie den Python-Datentyp an, wenn Sie Daten im Argument der Variablen var empfangen. Die dritte Zeile von unten, getvalue (), empfängt den Inhalt der Bindevariablen in der RETURNING-Klausel der SQL-Anweisung. Das Standardargument ist 0, das die Position der Bindevariablen angibt. Da es diesmal nur eine Bindevariable gibt, ist 0 (zuerst) in Ordnung. In diesem Beispiel werden die aktualisierten Spaltenwerte, die gedruckt werden, in Form einer Liste von Ints zurückgegeben.
Die zweite Zeile vom unteren Rand des vorherigen Beispiels ist anwendbar. Nach dem Ausführen der Aktualisierungs-SQL können Sie die Anzahl der aktualisierten Zeilen abrufen, indem Sie auf das Attribut rowcount des Cursor-Objekts im Beispiel zugreifen. Wenn Sie in einer SELECT-Anweisung auf diesen Attributwert zugreifen, wird die Anzahl der zu diesem Zeitpunkt abgerufenen Zeilen gespeichert.
Recommended Posts