Comment utiliser le Module sqlite3 en Python 3

L’auteur a sélectionné le Fonds de secours COVID-19 pour recevoir un don dans le cadre du programme écrire pour les dons.

Introduction

SQLite est une base de données SQL autonome basée sur des fichiers. SQLite est livré avec Python et peut être utilisé dans l’une de vos applications Python sans avoir à installer de logiciel supplémentaire.

dans ce tutoriel, nous allons passer en revue le module sqlite3 en Python 3., Nous allons créer une connexion à une base de données SQLite, ajouter une table à cette base de données, insérer des données dans cette table, lire et modifier les données de cette table.

pour ce tutoriel, nous allons travailler principalement avec un inventaire de poissons que nous devons modifier à mesure que les poissons sont ajoutés ou retirés d’un aquarium fictif.

prérequis

Pour tirer le meilleur parti de ce tutoriel, il est recommandé d’avoir une certaine familiarité avec la programmation en Python et un peu d’arrière-plan de base avec SQL.,

Vous pouvez consulter ces tutoriels pour obtenir les informations générales nécessaires:

  • comment coder dans Python3
  • Une Introduction aux requêtes dans MySQL

Étape 1 — Création d’une connexion à une base de données SQLite

lorsque nous nous connectons à une base de données SQLite, nous accédons à des données qui Les bases de données SQLite sont des moteurs SQL complets qui peuvent être utilisés à de nombreuses fins. Pour l’instant, nous allons considérer une base de données qui suit l’inventaire des poissons dans un aquarium fictif.,

On peut se connecter à une base de données SQLite en utilisant le Python sqlite3 module:

import sqlite3connection = sqlite3.connect("aquarium.db")

import sqlite3 donne à notre programme en Python d’accès à la balise sqlite3 module. La fonction sqlite3.connect() renvoie un objet Connection que nous utiliserons pour interagir avec la base de données SQLite contenue dans le fichier aquarium.db. La balise aquarium.db le fichier est créé automatiquement par sqlite3.connect() si aquarium.db n’existe pas déjà sur notre ordinateur.,

nous pouvons vérifier que nous avons créé avec succès notre objet connection en exécutant:

print(connection.total_changes)

Si nous exécutons ce code Python, nous verrons une sortie comme:

Output
0

connection.total_changes est le nombre total de lignes de base de données qui ont été modifiées par connection. Puisque nous n’avons pas encore exécuté de commandes SQL, 0 total_changes est correct.

Si, à tout moment, nous trouvons que nous voulons recommencer ce tutoriel, nous pouvons supprimer le fichieraquarium.db de notre ordinateur.,

Remarque: Il est également possible de se connecter à une base de données SQLite qui réside strictement en mémoire (et non dans un fichier) en passant la chaîne spéciale ":memory:" dans sqlite3.connect(). Par exemple, sqlite3.connect(":memory:"). Une base de données SQLite ":memory:" disparaîtra dès la sortie de votre programme Python. Cela peut être pratique si vous souhaitez qu’un bac à sable temporaire essaie quelque chose dans SQLite et que vous n’avez pas besoin de conserver les données après la sortie de votre programme.,

Étape 2 — Ajout de données à la base de données SQLite

maintenant que nous nous sommes connectés à la base de données SQLiteaquarium.db, nous pouvons commencer à insérer et à lire des données à partir de celle-ci.

Dans une base de données SQL, les données sont stockées dans des tables. Les Tables définissent un ensemble de colonnes et contiennent 0 lignes ou plus avec des données pour chacune des colonnes définies., une table nommée fish qui suit les données suivantes:

nom espèces, tank_number
Sammy requin 1
Jamie seiche 7

Le fish table permettra de suivre d’une valeur de name, species et tank_number pour chaque poisson dans l’aquarium., Two example fish rows are listed: one row for a shark named Sammy, and one row for a cuttlefish named Jamie.

We can create this fish table in SQLite using the connection we made in Step 1:

cursor = connection.cursor()cursor.execute("CREATE TABLE fish (name TEXT, species TEXT, tank_number INTEGER)")

connection.cursor() returns a Cursor object. Cursor objects allow us to send SQL statements to a SQLite database using cursor.execute()., La balise "CREATE TABLE fish ..." string est une instruction SQL qui crée une table nommée fish avec les trois colonnes décrites précédemment: name de type TEXT, les espèces de type TEXT, et tank_number de type INTEGER.,

Maintenant que nous avons créé un tableau, on peut insérer des lignes de données:

cursor.execute("INSERT INTO fish VALUES ('Sammy', 'shark', 1)")cursor.execute("INSERT INTO fish VALUES ('Jamie', 'cuttlefish', 7)")

Nous appelons cursor.execute() deux fois: une fois pour insérer une ligne pour le requin Sammy dans le réservoir 1, et une fois pour insérer une ligne pour les seiches Jamie dans le réservoir 7. "INSERT INTO fish VALUES ..." est une instruction SQL qui permet d’ajouter des lignes à une table.,

Dans la section suivante, nous allons utiliser un SQL SELECT déclaration d’inspecter les lignes nous avons inséré dans notre fish tableau.

Étape 3 — Lecture des données de la base de données SQLite

à L’Étape 2, nous avons ajouté deux lignes à une table SQLite nomméefish., Nous pouvons récupérer ces lignes à l’aide d’une balise SELECT instruction SQL:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si nous exécutez ce code, nous allons voir la sortie comme suit:

Output

Le cursor.execute() fonction exécute un SELECT déclaration afin de récupérer les valeurs de la name, species, et tank_number colonnes dans le fish tableau. fetchall() récupère tous les résultats de la balise SELECT déclaration., Lorsque nous print(rows) nous voyons une liste de deux tuples. Chaque tuple a trois entrées; une entrée pour chaque colonne sélectionnée dans la table fish. Les deux tuples que les données que nous avons inséré dans l’Étape 2: un tuple de Sammy le shark, et un tuple de Jamie le cuttlefish.,

Si nous voulions pour extraire des lignes dans le fish table qui correspondent à un ensemble de critères précis, nous pouvons utiliser un WHERE l’article:

Si nous courons, nous allons voir le résultat comme suit:

Output

Comme avec l’exemple précédent, cursor.execute(<SQL statement>).fetchall() nous permet de récupérer tous les résultats d’une SELECT déclaration. La balise WHERE clause dans le SELECT déclaration des filtres pour les lignes dont la valeur de name est target_fish_name., Notez que nous utilisons ? pour remplacer notre target_fish_name variable dans le SELECT déclaration. Nous nous attendons à seulement correspondent à une seule ligne, et en effet nous ne voyons que la ligne Jamie le cuttlefish retourné.

avertissement: N’utilisez jamais D’opérations de chaîne Python pour créer dynamiquement une chaîne D’instruction SQL. L’utilisation D’opérations de chaîne Python pour assembler une chaîne D’instruction SQL vous rend vulnérable aux attaques par injection SQL. Les attaques par injection SQL peuvent être utilisées pour voler, altérer ou modifier les données stockées dans votre base de données., Utilisez toujours l’espace réservé? dans vos instructions SQL pour remplacer dynamiquement les valeurs de votre programme Python. Passez un tuple de valeurs comme deuxième argument à Cursor.execute() pour lier vos valeurs à l’instruction SQL. Ce modèle de substitution est démontré ici et dans d’autres parties de ce tutoriel ainsi.

Étape 4 — modification des données dans la base de données SQLite

Les lignes d’une base de données SQLite peuvent être modifiées à l’aide des instructions SQLUPDATE etDELETE.,

disons, par exemple, que Sammy le requin a été déplacé au réservoir numéro 2. Nous pouvons changer Sammy ligne dans la balise fish table afin de refléter ce changement:

notre UPDATE instruction SQL pour modifier la balise tank_number de Sammy pour sa nouvelle valeur de 2. La balise WHERE clause dans le UPDATE déclaration nous permet de modifier la valeur de la balise tank_number si une ligne a name = "Sammy".,

Si nous exécutons SELECT déclaration, nous pouvons confirmer notre mise à jour a été faite correctement:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si nous courons, nous allons voir la sortie comme suit:

Output

Notez que la ligne Sammy maintenant a la valeur de 2 pour son tank_number colonne.

disons que Sammy le requin a été relâché dans la nature et n’est plus tenu par l’aquarium., Comme Sammy ne vit plus à l’aquarium, il serait logique de supprimer la ligne Sammy de la table fish.

Question DELETE instruction SQL pour supprimer une ligne:

released_fish_name = "Sammy"cursor.execute( "DELETE FROM fish WHERE name = ?", (released_fish_name,))

un DELETE instruction SQL pour supprimer la ligne Sammy le shark. La clauseWHERE dans l’instructionDELETE garantit que nous supprimons une ligne uniquement si cette ligne aname = "Sammy".,

Si nous exécutons SELECT déclaration, nous pouvons confirmer notre la suppression a été effectuée correctement:

rows = cursor.execute("SELECT name, species, tank_number FROM fish").fetchall()print(rows)

Si nous exécutez ce code, nous allons voir la sortie comme suit:

Output

Notez que la ligne Sammy le shark est maintenant disparu, et seulement Jamie le cuttlefish reste.,

Étape 5 — Utilisation avec les Instructions Pour le Nettoyage Automatique

Dans ce tutoriel, nous avons utilisé deux principaux objets pour interagir avec la balise "aquarium.db" base de données SQLite: Connection objet nommé connection, et un Cursor objet nommé cursor.

De la même manière que les fichiers Python doit être fermé lorsque nous avons fini de travailler avec eux, Connection et Cursor objets devraient être fermées lorsqu’elles ne sont plus nécessaires.,

On peut utiliser un with déclaration pour nous aider à fermer automatiquement Connection et Cursor objets:

closing est une fonction de commodité fournis par la balise contextlib module. Lorsqu’un with déclaration des sorties, des closing assure que close() est appelée sur un objet est passé. La fonction closing est utilisée deux fois dans cet exemple., Une fois pour s’assurer que la balise Connection objet renvoyé par sqlite3.connect() est automatiquement fermée, et une deuxième fois pour s’assurer que la balise Cursor objet renvoyé par connection.cursor() est automatiquement fermé.,

Si nous exécutez ce code, nous allons voir le résultat comme suit:

Output

Depuis "SELECT 1" est une instruction SQL qui renvoie toujours à une seule ligne avec une seule colonne avec une valeur de 1, il est logique de voir un seul tuple avec des 1 comme sa seule valeur retournée par notre code.

Conclusion

le modulesqlite3 est une partie puissante de la bibliothèque standard Python; il nous permet de travailler avec une base de données SQL complète sur disque sans installer de logiciel supplémentaire.,

dans ce tutoriel, nous avons appris à utiliser le module sqlite3 pour se connecter à une base de données SQLite, ajouter des données à cette base de données, ainsi que lire et modifier les données de cette base de données. Le long du chemin, nous avons aussi appris les risques d’attaques par injection SQL et comment l’utiliser contextlib.closing pour appeler automatiquement close() sur des objets Python dans with consolidés.

de là, nous pouvons en apprendre davantage sur les bases de données SQL dans SQLite vs MySQL vs PostgreSQL: une comparaison des systèmes de gestion de base de données relationnelle.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Aller à la barre d’outils