[Python3] Connexion à Oracle Database et exécution de SQL [cx_Oracle]

introduction

Nous avons résumé comment utiliser le package cx_Oracle dans Python3. Avec cela, je pense que nous pouvons faire du développement.

Il est important de le dire en premier, mais il est préférable de consulter la documentation officielle. Document officiel cx_Oracle

Configuration du système

Installation du package

PowerShell


pip install cx_Oracle

** Lorsqu'une erreur survient ** Étant donné que Windows n'est pas fourni avec un compilateur C en standard, une erreur incluant le message suivant peut se produire lors de l'installation avec pip.

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

Dans ce cas, vous devez installer «Build Tools for Visual Studio 2019» sur la page de téléchargement de Visual Studio. (Au 23 novembre 2019) VC++.png [Configuration minimale requise] Charge de travail ・ Outils de construction C ++ Facultatif ・ MSVC v142 - Outil de construction VS 2019 C ++ x64 / x86 ・ SDK Windows 10

Se connecter à la base de données

connect.py


#Importation de package
import cx_Oracle

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

#Générer un descripteur de connexion
dsn = cx_Oracle.makedsn(HOST, PORT, service_name = SVC_NM)

#Établir une connexion
connection = cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8")

#Traitement tel que l'émission SQL...

#Libérez la connexion
connection.close()

Importation de package

import cx_Oracle

Générer un descripteur de connexion

HOST = "localhost"
PORT = 1521

# SID(Identifiant d'instance)Lors de l'utilisation
SID = "hoge"
dsn = cx_Oracle.makedsn(HOST, PORT, sid = SID)

# SERVICE_NAME(Nom du service)Lors de l'utilisation
SVC_NM = "hoge.example.com"
dsn = cx_Oracle.makedsn(HOST, PORT, service_name = SVC_NM)

# NET_SERVICE_NAME(Nom du service réseau, identifiant de connexion)Lors de l'utilisation
NET_SN = "hogenet"
dsn = cx_Oracle.makedsn(HOST, PORT, NET_SN)

#Descripteur de connexion généré(Exemple: SERVICE_NAME)
print(dsn)
# >> (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=hoge.example.com)))

cx_Oracle.makedsn() Renvoie l'identifiant de connexion basé sur les paramètres passés dans l'argument.

** * Lors de l'utilisation du nom du service réseau (identifiant de connexion) ** Il est nécessaire de configurer au préalable tnsnames.ora côté client.

Établir et libérer des connexions

#Établir une connexion
connection = cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8")

#Traitement tel que l'émission SQL...

#Libérez la connexion
connection.close()

Vous pouvez utiliser la syntaxe with pour libérer automatiquement une connexion lorsque vous quittez le bloc with. Sauf raison particulière, je pense personnellement que c'est mieux.

with cx_Oracle.connect(USER, PASS, dsn, encoding = "UTF-8") as connection:
    #Traitement tel que l'émission SQL...
    # connection.close()Pas besoin de décrire

Exécution SQL

query.py


#Génération de curseur
cursor = connection.cursor()

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

#Émission SQL
cursor.execute(sql, bind_data)

#L'acquisition des données
rows = cursor.fetchall()

#Changer la valeur pour lier
bind_data["id"] = 2

#Émission SQL(Perspective douce)
cursor.execute(sql, bind_data)

#Relâcher le curseur
cursor.close()

Générer et libérer des curseurs

#Génération de curseur
cursor = connection.cursor()

#Relâcher le curseur
cursor.close()

Comme une connexion, elle peut être libérée automatiquement avec la syntaxe with. Sauf si vous avez une raison spécifique, nous vous le recommandons également.

with connection.cursor() as cursor:
    #Émission SQL, etc....
    # cursor.close()Pas besoin de décrire

Variable de liaison

#Variable de liaison(Espace réservé)
sql = "select country_id, country_name from countries where country_id = :id"

#Définition de la valeur à lier
#Pour le type de dictionnaire
bind_data = { id: 1 }

#Pour le type de liste
bind_data = [1]
Sorte de dictionnaire Type de liste
Une valeur qui correspond à la variable de liaison et à la clé est attribuée Les valeurs sont attribuées dans l'ordre de placement des variables de liaison depuis le début de SQL

Émission SQL

cursor.execute(sql, bind_data)

#Les arguments de mots-clés sont également possibles
cursor.execute(sql, id = 1)

#Réédition SQL en modifiant la valeur de la variable de liaison
bind_data["id"] = 2
cursor.execute(sql, bind_data)

*** PARSE SOFT * ** Le SQL émis est analysé par l'analyseur et mis en cache dans un pool partagé (HARD PARSE). Dans l'analyse logicielle, on peut s'attendre à une amélioration des performances en réutilisant les résultats d'analyse mis en cache dans le pool partagé.

L'acquisition des données

#Obtenez un enregistrement à la fois à partir du curseur
row = cursor.fetchone()
print(row)
# >> (1, Japan)

#Obtenez n'importe quel nombre d'enregistrements du curseur(Exemple:10 enregistrements)
numRows = 10
rows = cursor.fetchmany(numRows)
print(rows)
# >> [(1, Japan)]

#Récupérer tous les enregistrements du curseur
rows = cursor.fetchall()
print(rows)
# >> [(1, Japan)]

transaction

transaction.py


#Lancement de transaction explicite
connection.begin()

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

#commettre
connection.commit()

#retour en arriere
connection.rollback()

Lancement de transaction explicite

#Optionnel
connection.begin()

Oracle Database démarre automatiquement une transaction lorsque le premier SQL est exécuté, vous n'avez donc pas besoin de démarrer explicitement une transaction, sauf si vous avez une raison spécifique de le faire.

Commit et rollback

#commettre
connection.commit()

#retour en arriere
connection.rollback()

Si la connexion à la base de données est fermée sans validation, la transaction sera annulée.


Cliquez ici pour créer un environnement de développement Python3! [Python3] Construction de l'environnement de développement << Édition Windows >>

Il existe également une feuille de triche Python3! [Python3] Aide-mémoire Python pour les autres ingénieurs de langage << Bases >> [Python3] Aide-mémoire Python pour les autres ingénieurs de langage << Orienté objet >>

Recommended Posts

[Python3] Connexion à Oracle Database et exécution de SQL [cx_Oracle]
[Introduction à cx_Oracle] (Partie 2) Principes de base de la connexion et de la déconnexion à Oracle Database
[Introduction à cx_Oracle] (Partie 11) Bases de l'exécution PL / SQL
[Introduction à cx_Oracle] (Partie 6) Mappage des types de données DB et Python
Un script python qui convertit les données Oracle Database en csv
Exemple de construction d'environnement Python et d'exécution SQL vers DB et mémo de traitement de base pour les statistiques 2019
Python 3.6 sous Windows ... et vers Xamarin.
[Python] Hit Keras depuis TensorFlow et TensorFlow depuis c ++ pour accélérer l'exécution.
[Introduction à Python3 Jour 1] Programmation et Python
Traitez le résultat de l'exécution de Splunk en utilisant Python et enregistrez-le dans un fichier
Connectez-vous à la base de données utf8mb4 à partir de python
Python (de la première fois à l'exécution)
Journalisation Python et vidage vers json
Sélénium et python pour ouvrir Google
Extraire des tables de base de données avec CSV [connexion ODBC de R et python]
Comment créer un environnement d'exécution Python et Jupyter avec VSCode
Connectez votre base de données SQL Server à Alibaba Cloud Function Compute à l'aide de Python
De Python à l'utilisation de MeCab (et CaboCha)
Comment installer et utiliser pandas_datareader [Python]
Lier des méthodes aux classes et instances Python
Fractal pour faire et jouer avec Python
Portage et modification du solveur de doublets de python2 vers python3.
Lire Python csv et exporter vers txt
python: Comment utiliser les locals () et globals ()
[Python] Comment calculer MAE et RMSE
Comment utiliser le zip Python et énumérer
Compressez les données python et écrivez sur sqlite
Comment utiliser is et == en Python
(Journal 1) Comment créer, parcourir et enregistrer des données dans la base de données SQL du service Microsoft Azure avec python
[Introduction à cx_Oracle] (Partie 9) Mappage des types de données DB et Python (version 8 ou ultérieure)
MessagePack-Try pour lier Java et Python avec RPC
Comment générer une séquence en Python et C ++
[Introduction à Python3 Jour 12] Chapitre 6 Objets et classes (6.3-6.15)
Connexion ODBC à FileMaker 11 Server Advanced avec Python 3
Texte de l'image et publication sur slack (python slackbot)
Comment utiliser Python Kivy ④ ~ Exécution sur Android ~
Quittez l'exécution de Python avec Ctrl-C (répond à SIGINT)
Un script qui crée un binaire FlatBuffers à partir d'une base de données SQL
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
[Introduction à Python3, jour 22] Chapitre 11 Traitement parallèle et mise en réseau (11.1 à 11.3)
Envoyer un message à Skype et Chatwork en Python
[Introduction à l'application Udemy Python3 +] 64. Espace de noms et portée
[Introduction à Python3 Jour 11] Chapitre 6 Objets et classes (6.1-6.2)
Comment mesurer le temps d'exécution avec Python Partie 1
Notifier l'erreur et la fin de l'exécution par LINE [Python]
[Python] Comment utiliser la fonction de hachage et taple.
Introduction à Python "Re" 1 Construction d'un environnement d'exécution
Liste de code Python à déplacer et à mémoriser
Pour représenter la date, l'heure, l'heure et les secondes en Python
Comment tracer l'autocorrélation et l'autocorrélation partielle avec Python
Comment mesurer le temps d'exécution avec Python, partie 2
Sortie de la table spécifiée de la base de données Oracle en Python vers Excel pour chaque fichier
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel