<?xml version="1.0"?>
<rss xmlns:php="http://php.net/xsl" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>Accéder à une base de données Oracle à partir de Python - Chicoree</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python</link><atom:link href="http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python?action=toFeed" rel="self" type="application/rss+xml"/><description><![CDATA[cx_Oracle est un module Python qui permet de se connecter à une base de données Oracle à partir de Python. cx_Python est conforme à la PEP-249  Python Database API Specification v2.0 (DBAPI). C'est à dire que si vous avez déjà travaillé avec une autre interface compatible, vous devriez sans trop de problèmes retrouver vos points de repère. Dans le cas contraire, pas de panique: vous constaterez dans les lignes suivantes qu'accéder à une base de données avec Python est un jeu d'enfant.
]]></description><item><title>1 Installer les outils</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Installer_les_outils</link><description><![CDATA[<p>En introduction, je parlais de <i>jeu d'enfant</i>. Mais avant de pouvoir s'amuser, il faut passer par la corvée de l'installation. En fait, j'exagère un peu: ici encore rien de vraiment rébarbatif. Comme à mon habitude, je vais donner ici la procédure pour Linux.
</p>]]></description></item><item><title>1.1 Python</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Python</link><description><![CDATA[<p>Tout d'abord, je suppose que vous avec une version de Python récente déjà installée sur votre machine. La dernière version de <i>cx_Oracle</i> au moment où j'écris est la 5.1.3 — compatible avec Python 2.7, 3.3 et 3.4. En ce qui me concerne, j'utiliserai ici Python 3.4.1:
</p>]]></description></item><item><title>1.2 Oracle InstantClient</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Oracle_InstantClient</link><description><![CDATA[<p>Ensuite, en plus de python, vous aurez besoin des bibliothèques et du SDK <a>Oracle InstantClient</a>. Pour les obtenir, il faut vous rendre sur la <a>page de téléchargement du site d'Oracle</a>. Là, vous devrez choisir votre architecture et accepter la licence d'utilisation avant de pouvoir télécharger les fichiers nécessaires. Dans mon cas, il s'agit des fichiers <i>instantclient-basic-linux.x64-12.1.0.2.0.zip</i> et <i>instantclient-sdk-linux.x64-12.1.0.2.0.zip</i>.
</p>]]></description></item><item><title>1.3 cx_Oracle</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#cx_Oracle</link><description><![CDATA[<p>Voilà, c'est presque fini. Il vous reste à définir la variable d'environnement <tt>ORACLE_HOME</tt> puis à rajouter le chemin vers les bibliothèque à <tt>LD_LIBRARY_PATH</tt> et vous pourrez installer <i>cx_Oracle</i>:
</p>]]></description></item><item><title>2 Tester l'installation</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Tester_l.27installation</link><description><![CDATA[<p>Si tout se passe comme prévu, après quelques secondes vous serez en mesure de tester votre installation:
</p>]]></description></item><item><title>3 Utilisation</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Utilisation</link><description><![CDATA[<p>Passons maintenant au vif du sujet en tentant une première requête. Quelque chose de simple, mais qui utilise quand même une construction spécifique à Oracle, juste pour se convaincre que j'utilise bien un driver dédié:
</p>]]></description></item><item><title>3.1 Première requête</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Premi.C3.A8re_requ.C3.AAte</link><description><![CDATA[<p>Passons maintenant au vif du sujet en tentant une première requête. Quelque chose de simple, mais qui utilise quand même une construction spécifique à Oracle, juste pour se convaincre que j'utilise bien un driver dédié:
</p>]]></description></item><item><title>3.2 Récupérer les lignes comme un dictionnaire</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#R.C3.A9cup.C3.A9rer_les_lignes_comme_un_dictionnaire</link><description><![CDATA[<p>Si récupérer un <i>tuple</i> n'est pas satisfaisant, <i>cx_Oracle</i> vous offre la possibilité de définir votre propre format pour les lignes lues. Cela passe par la définition d'une fonction chargée de convertir le <i>tuple</i> original à votre guise:
</p>]]></description></item><item><title>3.3 Transmettre des données non-ASCII</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Transmettre_des_donn.C3.A9es_non-ASCII</link><description><![CDATA[<p>Je n'ai pas trop insisté dessus jusqu'à présent, mais il est (heureusement) possible de transmettre et recevoir des données non-ASCII avec <i>cx_Oracle</i>. Comme vous l'avez peut-être remarqué dans l'exemple précédent j'ai défini la variable d'environnement <a>NLS_LANG</a> à une valeur adaptée avant d'ouvrir la connexion à la base de données. Cela a été indispensable afin d'utiliser l'alias <i>prénom</i> (avec un accent) pour l'une des colonnes récupérées:
</p>]]></description></item><item><title>3.4 Commandes de définitions de données (DDL statements)</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Commandes_de_d.C3.A9finitions_de_donn.C3.A9es_.28DDL_statements.29</link><description><![CDATA[<p>Pour continuer notre exploration de <i>cx_Oracle</i>, voyons maintenant comment envoyer des <a>commandes de définition de données</a> (<tt>CREATE</tt>, <tt>DROP</tt>, ...). Par exemple pour créer une table:
</p>]]></description></item><item><title>3.5 Insérer des données</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Ins.C3.A9rer_des_donn.C3.A9es</link><description><![CDATA[<p>En se basant sur la table créée dans la section précédente, voyons comment transmettre une requête pour insérer des données. En soi même, cela n'a rien de spécial. Mais c'est une très bonne occasion pour évoquer quelques petites choses... Mais, tout d'abord, le code:
</p>]]></description></item><item><title>3.6 Utiliser la connexion comme gestionnaire de contexte</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Utiliser_la_connexion_comme_gestionnaire_de_contexte</link><description><![CDATA[<p>Un <i>gestionnaire de contexte</i> (<a>PEP-343  <i>The "with" Statement</i></a>) est une construction introduite avec Python 2.5 et qui permet de garantir que certaines taches seront exécutées automatiquement à la sortie d'un bloc. C'est très utile par exemple pour s'assurer qu'un fichier sera fermé quoi qu'il arrive. Ou, dans notre cas, qu'une transaction sera confirmé <i>en cas de sortie normale du bloc</i>. Avec le corollaire que les modifications sont annulées <i>si l'on sort du bloc à cause d'une exception</i>. En pratique cela s'écrit ainsi:
</p>]]></description></item><item><title>3.7 Supprimer des enregistrements</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Supprimer_des_enregistrements</link><description><![CDATA[<p>Passons maintenant à la suppression d'un enregistrement. Mais tout d'abord, je vous rassure: nous n'allons pas faire l'inventaire de <i>toutes</i> les commandes SQL. Vous l'avez compris, le principe restera toujours le même. Néanmoins, je vais utiliser le prétexte d'une requête <tt>DELETE</tt> pour aborder un dernier point de détail:
</p>]]></description></item><item><title>4 Conclusion</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Conclusion</link><description><![CDATA[<p>Voilà, ce rapide tour d'horizon de <i>cx_Oracle</i> est terminé. Je n'ai fait qu’effleurer les possibilités de ce module. Mais cela devrait déjà être suffisant pour vous permettre de stocker et récupérer des données, ou encore de modifier le schéma de votre base. Une fois que vous serez un peu plus familiarisé avec ces fonctionnalités élémentaires, n'hésitez pas à vous plonger dans la <a>documentation officielle</a>: celle-ci est un peu aride, mais avec de la persévérances, vous découvrirez que <i>cx_Oracle</i> est suffisamment souple pour s'adapter à de nombreux besoins tout en étant adapté aux spécificités d'Oracle.
</p>]]></description></item><item><title>5 Ressources</title><link>http://www.chicoree.fr/w/Acc%C3%A9der_%C3%A0_une_base_de_donn%C3%A9es_Oracle_%C3%A0_partir_de_Python#Ressources</link><description/></item></channel></rss>
