[Introduction à cx_Oracle] (10e) Instruction Update DML et DDL / DCL

Environnement de vérification

--Utilisation d'Oracle Cloud

Exécution des instructions de mise à jour DML et DDL / DCL

Identique à l'instruction SELECT de base, exécutez l'instruction SQL avec la méthode execute () de l'objet Cursor. Voici un exemple.

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())

Variable de liaison

La gestion des variables de liaison est fondamentalement la même que 7th. Voici un exemple. On suppose que le sample10a.py ci-dessus est exécuté.

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)

La méthode executemany () sur la deuxième ligne à partir du bas exécute le PreparedStatement pour le nombre d'éléments dans la liste du deuxième paramètre, comme vous pouvez l'imaginer d'après l'utilisation.

Liaison de valeur NULL

La valeur NULL de DB correspond à None sur Python. Si vous souhaitez stocker NULL, définissez la variable de liaison sur Aucun. Si vous SELECT une valeur NULL, None est stocké dans la variable.

Lier la variable comme destination de sortie

Jusqu'à présent, nous n'avons vu que des exemples de variables de liaison qui transmettent des valeurs à SQL. En réalité, il existe également des variables de liaison reçues de SQL. Dans ce cas, vous pouvez utiliser la méthode var de l'objet Cursor pour créer une variable Python qui agit comme une variable de liaison qui reçoit la valeur. Vous trouverez ci-dessous un exemple d'utilisation de variables de liaison qui reçoivent la clause RETURNING. On suppose que le sample10b.py ci-dessus est exécuté.

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)

La cinquième ligne à partir du bas est la définition des variables Python pour les variables de liaison qui reçoivent la sortie de SQL. Spécifiez le type de données Python lors de la réception de données dans l'argument de la variable var. La troisième ligne à partir du bas, getvalue (), reçoit le contenu de la variable de liaison dans la clause RETURNING de l'instruction SQL. L'argument par défaut est 0, qui spécifie la position de la variable de liaison. Comme il n'y a qu'une seule variable de liaison cette fois, 0 (première) convient. Dans cet exemple, les valeurs de colonne mises à jour qui sont imprimées sont renvoyées sous la forme d'une liste d'entiers.

Connaître le nombre de lignes mises à jour

La deuxième ligne à partir du bas de l'échantillon précédent est applicable. Vous pouvez obtenir le nombre de lignes mises à jour en accédant à l'attribut rowcount de l'objet Cursor dans l'exemple après avoir exécuté la mise à jour SQL. Si vous accédez à cette valeur d'attribut dans une instruction SELECT, le nombre de lignes extraites à ce moment est stocké.

Recommended Posts

[Introduction à cx_Oracle] (10e) Instruction Update DML et DDL / DCL
[Introduction à cx_Oracle] (8e) version de cx_Oracle 8.0
[Introduction à cx_Oracle] (12e) Gestion des exceptions DB
[Introduction à cx_Oracle] (17e) Gestion du type de date
[Introduction à cx_Oracle] (5e) Gestion des données japonaises
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
[Introduction à cx_Oracle] Présentation de cx_Oracle
[Introduction à cx_Oracle] (Partie 4) Récupération et défilement du jeu de résultats
Série: Introduction à cx_Oracle Contents
[Introduction à cx_Oracle] (Partie 2) Principes de base de la connexion et de la déconnexion à Oracle Database
Introduction au Deep Learning ~ Pliage et mise en commun ~
[Introduction à AWS] Conversion de texte-voix et lecture ♪
[Introduction à cx_Oracle] (15e) Création d'un jeu de résultats dans un format autre que tapple