Code source de pyspc.io.dbase.sdb

#!/usr/bin/python3
# -*- coding: utf-8 -*-
########################################################################
#
# This file is part of python module <pyspc>.
# Copyright (C) 2013-2021  R. Marty
#   (renaud.marty@developpement-durable.gouv.fr)
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program (see COPYING.txt).
# If not, see <http://www.gnu.org/licenses/>.
#
########################################################################
"""
Bases de données SQLITE
"""
import os.path
import pyspc.core.exception as _exception
import pyspc.io.dbase.dbase as _dbase


[docs] class Sdb(_dbase.Dbase): """ Bases SQLite (.sqlite) Attributes ---------- filename : str Nom du fichier _dbase_connect : sqlite3 Object de connexion sqlite3 _dbase_cursor : sqlite3 Curseur de sqlite3 sql : str Requête SQL _tables : str Tables de la base """ def __init__(self, filename=None): """ Bases SQLite (.sqlite) Parameters ---------- filename : str Nom du fichier Sdb """ super().__init__(filename=filename)
[docs] def connect(self): """ Créer la connexion à la base de données Créer le curseur sqlite3 .. warning:: Cette méthode nécessite l'import de la bibliothèque tierce sqlite3 """ import sqlite3 # Contrôles if not os.path.exists(self.filename): raise OSError(f"Base de données inconnue {self.filename}") # Ouverture de la base self._dbase_connect = sqlite3.connect(self.filename) self._dbase_cursor = self._dbase_connect.cursor()
[docs] def execute(self, warning=True): """ Exécution de la requête SQL Parameters ---------- warning : bool Afficher les avertissements. Par défaut: True Returns ------- list or None Eléments retenus par la requête SQL .. warning:: Cette méthode nécessite l'import de la bibliothèque tierce sqlite3 """ import sqlite3 data = None if self.sql is None: raise ValueError('Requête SQL non définie') if not isinstance(self.sql, str): raise ValueError('Requête SQL incorrecte') if not isinstance(self._dbase_cursor, sqlite3.Cursor): raise OSError('Curseur SDB incorrect ou non défini') try: content = self._dbase_cursor.execute(self.sql) except sqlite3.Error: _exception.Warning( __name__, f"erreur d'exécution de la requête SQL\n'{self.sql}'") else: try: data = content.fetchall() except sqlite3.Error: data = None if warning: _exception.Warning( __name__, "une erreur est survenue lors de la " "lecture de la base Access. " "Cela peut provenir de la " "lecture de la date") return data return data
[docs] def lastrowid(self): """ Récupérer l'identifiant du dernier enregistrement Returns ------- int ou None Identifiant du dernier enregistrement """ return self._dbase_cursor.lastrowid