This repository has been archived on 2022-03-31. You can view files and clone it, but cannot push or open issues or pull requests.
GesMag/db.py

65 lines
2.7 KiB
Python
Raw Normal View History

2021-11-18 20:40:34 +01:00
import sqlite3
2021-11-19 11:12:28 +01:00
from sqlite3.dbapi2 import Cursor
2021-11-18 20:40:34 +01:00
class BaseDeDonnees:
"""Gère la base de donnée."""
def __init__(self, urlBaseDeDonnee: str):
self.connexion = self.creerConnexion(urlBaseDeDonnee)
2021-11-19 11:12:28 +01:00
def creerConnexion(self, path: str):
2021-11-19 00:48:26 +01:00
"""Connexion à une base de donnée SQLite."""
2021-11-19 11:12:28 +01:00
if not self.fichierExiste(path): # si l base de donnée n'existe pas
open(path, "x") # on la créer
2021-11-18 20:40:34 +01:00
try:
connnexion = sqlite3.connect(path)
except sqlite3.Error as e:
2021-11-19 11:12:28 +01:00
print(e) # on affiche l'erreur
connnexion = None # et renvoie None
2021-11-18 20:40:34 +01:00
return connnexion
2021-11-19 11:12:28 +01:00
def fichierExiste(self, path: str) -> bool:
2021-11-19 00:48:26 +01:00
"""Vérifie qu'un fichier existe."""
2021-11-19 11:12:28 +01:00
try: # on essaie d'ouvrir le fichier
2021-11-18 20:40:34 +01:00
open(path, "r")
2021-11-19 11:12:28 +01:00
except FileNotFoundError: # si le fichier n'existe pas
2021-11-18 20:40:34 +01:00
return False
2021-11-19 11:12:28 +01:00
else: # si le fichier existe
2021-11-18 20:40:34 +01:00
return True
2021-11-19 11:12:28 +01:00
def requete(self, requete: str, valeurs = None):
2021-11-19 00:48:26 +01:00
"""Envois une requête vers la base de données."""
2021-11-18 20:40:34 +01:00
try:
curseur = self.connexion.cursor()
2021-11-19 11:12:28 +01:00
if valeurs: # s'il y a des valeurs alors on lance la commande `execute` avec ses dernières
if type(valeurs) not in [list, tuple]: # si la valeur c'est juste une chaîne de charactère (par exemple), alors la converti en liste
2021-11-18 20:40:34 +01:00
valeurs = [valeurs]
curseur.execute(requete, valeurs)
2021-11-19 11:12:28 +01:00
else: # sinon on lance juste la requête
2021-11-18 20:40:34 +01:00
curseur.execute(requete)
2021-11-19 11:12:28 +01:00
self.connexion.commit() # applique les changements à la base de donnée
return (curseur, curseur.lastrowid) # renvoie le curseur et l'ID de l'élément modifié
except sqlite3.Error as e: # s'il y a eu une erreur SQLite
2021-11-18 20:40:34 +01:00
print(e)
def affichageResultat(self, curseur: tuple) -> list:
2021-11-19 00:48:26 +01:00
"""Affiche le résultat d'une requête."""
2021-11-18 20:40:34 +01:00
tableau = []
2021-11-19 11:12:28 +01:00
if curseur == None: # si le curseur est vide il n'y a rien a affiché (tableau vide)
2021-11-18 20:40:34 +01:00
return tableau
2021-11-19 11:12:28 +01:00
lignes = curseur[0].fetchall() # sinon on récupère les éléments
2021-11-18 20:40:34 +01:00
for ligne in lignes:
2021-11-19 11:12:28 +01:00
tableau.append(ligne) # on les ajoute au tableau
return tableau # on le renvoie
def affichageResultatDictionnaire(self, cles, curseur: Cursor) -> dict:
"""
Même but que `affichageResultat()` mais avec
les clés qui correspondent aux valeurs.
"""
valeurs = self.affichageResultat(curseur)[0]
if type(cles) not in [list, tuple]:
cles = [cles]
if len(cles) != len(valeurs):
raise IndexError # il y a pas autant de clés que de valeurs
return dict(zip(cles, valeurs))