Python et les bases de données SQLite3

Le langage Python peut se connecter à toute sorte de base de donnée et intéragir avec notament SQLite3 qui est un choix populaire en tant que logiciel de base de données intégré pour le stockage local / client dans les logiciels d'application tels que les navigateurs Web. C'est sans doute le moteur de base de données le plus largement déployé, tel qu'il est utilisé aujourd'hui par plusieurs navigateurs, systèmes d'exploitation et systèmes embarqués répandus (tels que les téléphones mobiles), entre autres. SQLite est lié à de nombreux langages de programmation.



1-  Création  de bases de données SQLite3

SQLite est une bibliothèque qui fournit une base de données légère sur disque ne nécessitant pas de processus serveur distinct et permet d’accéder à la base de données à l’aide d’une variante du langage de requête SQL. Certaines applications peuvent utiliser SQLite pour le stockage de données interne. Il est également possible de prototyper une application utilisant SQLite, puis de transférer le code dans une base de données plus grande telle que PostgreSQL ou Oracle.

Pour utiliser le module, vous devez d'abord créer un objet Connection qui représente la base de données. Dans l'exemple ci-dessous, les données seront stockées dans le fichier mabase.db:

import sqlite3 
conn = sqlite3.connect('mabase.db')

Remarque. importante !

Vous n'êtes pas obligé de créer la base de données mabase.db, mais elle sera crée automatiquement dans le même réprtoire que le fichier Python!

Une fois que vous avez une connexion, vous pouvez créer un objet Cursor et appeler sa méthode execute() pour exécuter des commandes SQL:

# Créer un cursor
cur = conn.cursor()

2 - Création de table SQLite3

Et maintenant si on veut créer une table au sein de la base SQLite3 mabase.db, il suffit d'utiliser la commande CREATE TABLE nom_de_la_table:

Code complet:

# -*- coding: utf-8 -*-
import sqlite3 
conn = sqlite3.connect('mabase.db') 
# Créer un cursor 
cur = conn.cursor() 
# Création de la requete 
req = "CREATE TABLE students(id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL)" 
# Exécution de la requete 
cur.execute(req) 
# Envoyer la requete 
conn.commit() 
# Fermer la connexion 
conn.close

3-  Insertion de données

L'insertion de données en environnement SQLite3 est exactement identique au cas du MySql:

# Insérer une ligne de données 
cur.execute ("INSERT INTO students (`nom`,`email`) VALUES ('Albert', 'albert@gmail.com')")
# Commettre ou engager les données
conn.commit ()

Code complet

# -*- coding: utf-8 -*- 
import sqlite3 
conn = sqlite3.connect('mabase.db') 
cur = conn.cursor() 
# Insérer une ligne de données 
cur.execute("INSERT INTO students(`nom`,`email`) VALUES ('Albert', 'albert@gmail.com')") 
# Engager l'opération 
conn.commit() 
# Fermer la connexion 
conn.close()

4-  Insertion des données de variables dans une table SQLite

Quand on a inséré directement les données au sein de la requête comme on a fait dans l'exemple ci-dessus, aucun problème n'a été rencontré!

cur.execute("INSERT INTO students(`nom`,`email`) VALUES ('Albert', 'albert@gmail.com')")

Imaginez que les données qu'on souhaite insérer, sont des valeurs de variables récupérées depuis un autre fichier ou provenant d'un formulaire d'enregistrement...Dans ce cas l'insertion des données de cette façon est totalement erronée !:

nom = "Albert"
email = "albert@gmail.com"
cur.execute("INSERT INTO students(`nom`,`email`) VALUES (nom, email)")
# TOTALEMENT FAUX !

ATTENTION ! TOTALEMENT FAUX ! Puisque les variables nom et email ne seront pas interprétées !
Pour corriger l'erreur, on utilise la méthode de formatage des chaines à l'aide du symbole : ''?''

nom = 'Albert' 
email = 'albert@gmail.com' 
age = 22   
cur = conn.cursor()  
cur.execute("Insert into students (nom,email,age) values (?,?,?)",(nom, email, age))

Code complet:

# -*- coding: utf-8 -*- 
import sqlite3  
conn = sqlite3.connect('mabase.db')  
nom = 'Albert' 
email = 'albert@gmail.com' 
age = 22 
# Créer un cursor  
cur = conn.cursor()  
cur.execute("Insert into students (nom,email,age) values (?,?,?)",(nom, email, age)) 
conn.commit() 
conn.close() 

5-  Affichage des données d'une table SQLite3

Maintenant, il est tout à fait légitime de se demander si tout a été bien réglé : création de la table students au sein de la base de données SQLite3 , insertion de données au sein de la table students...



5.1 - Création d'un cursor pour exécuter une requête de sélection

cur = conn.cursor()  
result = cur.execute("select*from students ")

5.2- Parcourir les résultats de la sélection

Pour afficher les données, on va parcourir l'objet cursor par un compteur row. La variable row qui fait le parcourt est un objet tuple dont les constituants sont les valeurs des champs : id, nom, email, age...

for row in result:     
   print("ID : ",row[0])     
   print("nom : ",row[1])     
   print("Email : ",row[2])     
   print("Age  : ",row[3])

6-  Éditeur WYSIWYG SQLite3

.Tout a été fait en noir ! Jusqu'à présent vous n'avez encore rien vue, ni table ni données...Pour répondre à cette question, je vous informe qu'il y a de nombreux utilitaires permettant d'explorer les bases de données SQLite3. Je vous recommande DB Browser for SQLite qui est gratuit et très simple d'usage :

  1. Téléchargez DB Browser for SQLite,
  2. Installez le,
  3. Lancez DB Browser
  4. Depuis le menu File –> cliquez sur le sous menu Open Databse
  5. Sélectionnez ensuite votre base de donnée mabase.db
  6. Cliquez finalement sur Browse data pour voir votre table students avec les donnée que vous venez d’insérer :

 

 

Younes Derfoufi
CRMEF OUJDA

4 thoughts on “Python et les bases de données SQLite3

  1. type de result . je pense que ce nest pas un objet de la class cursor . ? si result est un objet de la class cursor . si ca linstruction quelle faut ecrire je pense . result=cursor() .
    vous pouvez expliquez sa svp
    et merci bcp pour les tutos et le cours

Leave a Reply

Your email address will not be published. Required fields are marked *