Code source de pyspc.io.dbase.dbase

#!/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/>.
#
########################################################################
"""
Objets natifs de pyspc : bases de données
"""
import os.path
import pyspc.core.exception as _exception


[docs] class Dbase(): """ Classe de base conçus pour manipuler les bases de données. Attributes ---------- filename : str Nom du fichier de la base de données _dbase_connect : pyodbc ou sqlite3 Connexion à la base _dbase_cursor : pyodbc ou sqlite3 Curseur de la base sql : str Requête SQL _tables : str Tables de la base """ def __init__(self, filename=None): """ Initialiser l'instance Dbase. Parameters ---------- filename : str Nom du fichier de la base de données """ if filename is None: raise ValueError('Nom de fichier non défini') if not os.path.exists(filename): raise ValueError(f'Fichier inexistant : {filename}') self.filename = filename self._dbase_connect = None self._dbase_cursor = None self.sql = None self._tables = None self.tables = None def __str__(self): """Afficher les méta-données.""" cname = self.__class__.__name__ text = """ ************************************* ********* {cname} ******************* ************************************* * NOM FICHIER = {filename} * REQUETE SQL = \n{sql} ************************************* """ return text.format(cname=cname, **vars(self))
[docs] def close(self): """Fermer la connexion à la base de données et le curseur <dbase>.""" self._dbase_cursor.close() self._dbase_connect.close() self._dbase_cursor = None self._dbase_connect = None
[docs] def commit(self): """Commiter/accepter les enregistrements ajoutés.""" self._dbase_connect.commit() # enregistrement
[docs] def connect(self): """ Créer la connexion à la base de données et le curseur. .. warning:: Non implémenté """ raise NotImplementedError
[docs] def execute(self): """ Exécution de la requête SQL. .. warning:: Non implémenté """ raise NotImplementedError
[docs] def rollback(self): """Annuler les enregistrements ajoutés.""" self._dbase_connect.rollback()
[docs] def check_sql_return(self, content=None, warning=False): """Contrôler le retour de la requête SQL.""" if not content: if warning: _exception.Warning( __name__, f"Aucune correspondance pour la requête SQL\n'{self.sql}'") return None return content