Python dispose d’une excellente prise en charge des bases de données intégrée dans sa bibliothèque standard, vous pouvez donc créer et interagir avec une base de données sans recourir à des frameworks externes comme Django ORM.
SQLite est léger et facile à intégrer à Python. Découvrez les principes de base de la programmation de bases de données en Python avec une simple application d’enregistrement des utilisateurs.
Table des matières
Comment créer une base de données en Python
Pour créer et interagir avec une base de données en Python, vous avez besoin de deux éléments principaux : une connexion et un curseur.
Une connexion vous aide à vous connecter à une base de données existante ou à en créer une nouvelle. Voici comment créer une connexion à une base de données en Python avec SQLite :
import sqlite3
conn = sqlite3.connect('path/to/database.db')
conn.close()
La méthode connect() prend le chemin d’accès à une base de données existante. S’il n’y a pas de base de données au chemin spécifié, il en créera une. Vous devez fermer votre connexion à la base de données lorsque vous avez fini d’interagir avec la base de données.
Un curseur vous aide à interagir avec la base de données connectée. Vous utiliserez un curseur pour exécuter des requêtes SQL dans votre programme Python. Voici comment créer un curseur :
cursor = conn.cursor()
cursor.close()
Vous pouvez créer un curseur en appelant la méthode curseur() sur un objet de connexion ouvert.
Comment exécuter une transaction de base de données en Python
À l’aide d’un curseur, vous pouvez exécuter des instructions, des requêtes ou des scripts SQL pour lire ou écrire des données, ou modifier la structure de la base de données.
Il existe trois méthodes principales que vous pouvez utiliser pour exécuter une transaction de base de données.
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
name TEXT,
age INTEGER
)
""")
Ce code appelle la méthode d’exécution sur un curseur, en lui passant une chaîne contenant une instruction SQL.
data = [
('Alice', 25),
('Bob', 30),
('Charlie', 22)
]cursor.executemany("""INSERT INTO users (name, age) VALUES (?, ?)""", data)
Le code ci-dessus utilise la méthodeexecutemany pour insérer plusieurs fois des valeurs dans la base de données.
Noter la ? espaces réservés dans l’instruction SQL. La méthodeexecutemany les remplacera par les valeurs correspondantes pour chaque objet.
with open("path/to/script.sql") as file:
sql_script = file.read()cursor.executescript(sql_script)
Comment créer une application d’enregistrement avec Python et SQLite3
La logique derrière une application d’enregistrement consiste à obtenir les informations de l’utilisateur avec Python et à les stocker dans une base de données. Ces étapes vous montreront comment créer un système d’enregistrement simple avec Python et SQLite3.
Étape 1 : Connectez-vous à une base de données existante ou créez-en une nouvelle
Commencez par créer une base de données pour votre application ou connectez-vous à une base de données existante :
import sqlite3conn = sqlite3.connect('database.db')
cursor = conn.cursor()
cursor.close()
conn.close()
Le code ci-dessus crée un objet de connexion et un curseur pour interagir avec la base de données connectée.
Étape 2 : Créer une table pour les utilisateurs
Vous avez besoin d’un tableau pour stocker les données que les utilisateurs fourniront lors de leur inscription. Voici comment en créer un avec votre curseur :
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
first_name TEXT,
last_name TEXT,
email TEXT UNIQUE,
password TEXT
)
""")conn.commit()
Ce code créera une table appelée utilisateurs si elle n’existe pas dans votre base de données. Il crée quatre colonnes dans le tableau pour contenir les informations utilisateur. Le champ email est unique pour empêcher les utilisateurs de créer plusieurs comptes avec le même email.
L’appel à conn.commit est important pour valider la requête dans la base de données. Sans cela, aucune modification ne sera apportée à la base de données.
Si vous utilisez la méthodeexecutescript, vous pouvez ajouter le mot-clé COMMIT à la fin de votre fichier SQL afin de ne pas avoir à appeler conn.commit.
Étape 3 : Collecter les données utilisateur
Les fonctions Python facilitent la réutilisation du code, c’est donc une bonne idée de créer une fonction pour gérer la fonctionnalité d’enregistrement. Cette fonction collecte le prénom, le nom, l’e-mail et le mot de passe de l’utilisateur.
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
Étape 4 : Vérifiez l’exactitude du mot de passe
Modifiez la fonction register_user pour vous assurer que l’utilisateur saisit deux fois le même mot de passe. Si ce n’est pas le cas, vous devez leur demander de saisir à nouveau le mot de passe. Vous pouvez y parvenir avec une boucle comme celle-ci :
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")
email = input("Enter your email: ")while True:
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
if password1 == password2:
print("You have successfully registered!")
break
else:
print("Your passwords must match")
Avec ce changement, un utilisateur ne peut s’inscrire que si ses mots de passe correspondent.
Étape 5 : Vérifier l’unicité de l’e-mail
L’instruction SQL qui crée la table des utilisateurs définit le champ email comme unique. Cela signifie que la base de données renverra une erreur si un utilisateur s’inscrit avec un e-mail qui existe déjà. Pour agir de manière appropriée, vous devez gérer l’exception Python :
def register_user():
first_name = input("Enter your first name: ")
last_name = input("Enter your last name: ")while True:
email = input("Enter your email: ")
password1 = input("Enter your password: ")
password2 = input("Confirm your password: ")
if password1 == password2:
try:
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
else:
print("Your passwords must match.")
Ce code utilise le bloc try-sauf pour gérer l’erreur qui se produira en cas de doublons d’e-mails. Si la base de données renvoie une IntegrityError, la boucle while se poursuivra, invitant l’utilisateur à saisir une adresse e-mail différente.
Pour cet exemple d’application, il est raisonnable de supposer qu’une IntegrityError ne se produira qu’en raison d’une adresse e-mail en double. Dans une application réelle, vous utiliserez probablement une gestion des erreurs plus avancée pour résoudre d’autres problèmes qui pourraient survenir.
Étape 6 : Insérez les données de l’utilisateur dans la base de données
Maintenant que vous avez collecté et vérifié les données de l’utilisateur, il est temps de les ajouter à la base de données. Vous pouvez utiliser une requête SQL pour ce faire. Modifiez votre bloc try-sauf comme ceci :
try:
cursor.execute("""
INSERT INTO users (first_name, last_name, email, password)
VALUES (?, ?, ?, ?)
""", (first_name, last_name, email, password2))conn.commit()
print("You have successfully created an account.")
break
except sqlite3.IntegrityError:
print("Error: This email is already registered.")
Dans le bloc try-sauf modifié, le curseur exécute une opération d’insertion SQL. Enfin, la méthode conn.commit valide l’opération SQL dans la base de données.
Si vous avez suivi toutes les étapes ci-dessus, vous devriez disposer d’une application qui enregistre les utilisateurs et les enregistre dans la base de données. Vous pouvez utiliser une application comme Navigateur de base de données pour SQLite pour visualiser le contenu de votre base de données :
Utiliser des bases de données au lieu de types de collections
Pour les bases de données simples, il vous sera peut-être plus facile de créer votre propre code. Cependant, à mesure que votre application grandit et que votre base de données devient plus complexe, pensez à utiliser un outil comme Django ORM pour simplifier la tâche.
Pour continuer à mettre en pratique vos compétences de bas niveau en matière de bases de données, essayez de mettre en œuvre un système de connexion pour compléter le programme d’inscription.