classes | ||
csv | ||
.gitignore | ||
create_advanced_trigger.py | ||
create_database.py | ||
create_procedure.py | ||
create_trigger.py | ||
create_view.py | ||
csvprocess.py | ||
delete_database.py | ||
get_states_statistics.py | ||
notebook.ipynb | ||
README.md | ||
requirement.txt |
Projet INSEE -- base de données avancée
Installation
Il est vivement conseiller de faire fonctionner ce projet dans un environnement virtuel python :
- cloner le dépôt de code suivant:
git clone https://git.epha.se/ephase/projet_INSEE
- créer l'environnement virtuel:
cd projet_INSEE python -m venv .venv source .venv/bin/activate
- intaller les prérequis:
pip install -r requirements.txt
L'installation est maintenant opérationnelle. Il faut penser à activer l'environnement virtuel à chaque nouvelle ouverture d'un terminal.
ATTENTION!
L'ensemble des script présent ici nécessitent IMPÉRATIVEMENT Python3. Il est parfois nécessaire d'adapter les commandes ci-dessus en fonction de votre configuration.
Au CREMI par exemple, la création de l'environnement virtuel doit se faire aevc la commande suivante:
python3 -m venv .venv
Les éléments du projet
L'ensemble des scripts présents dans ce dépôt permettent l'affichage d'informations supplémentaires via des paramètres de la ligne de commandes:
- messages d'informations via l'option -V. Ces informations renseignent l'utilisateurs sur les temps d'exécutions des différentes parties de chacun des scripts.
- message de debug via l'option
--debug
. Affiche des iunformations détaillées sur les actions et résultats des scripts.
Consolider les fichiers bruts
C'est le script csvprocess.py
qui se charge de l'analyse des fichiers csv
bruts et de la génération des fichiers csv
consolidés.
Ce script accepte plusieurs arguments qu'il est possible de visualiser avec l'aide en ligne intégrée:
./csvprocess -help
Créer la base de donnée
C'est le script createdatabase.py
qui se charge de la création de la base de
données et de l'importation des fichiers csv
consolidés créés par le précédent
script.
La création des éléments se fait dans un nouveau schéma, il se nomme par défaut
insee
mais peut être changé via le paramètre --schema-name
.
Une aide en ligne est aussi disponible pour les détails des options disponibles.
./createdatabase.py --help
Nom dynamique de schéma et injection SQL
La definition dynamique du nom du schema nous oblige à utiliser la fonction
AsIs
. Cette fonction ne permet pas à cur.execute()
la mise en place de
sécuritées afin de prévenir les injections SQL.
Lors de la définition de la valeur de ce paramètre, nous le vérifions avec la
fonction check_schema_name()
. Afin de définir le nombre maximum de caractères
composant le nom d'un schéma, nous avons vérifié dans le code source de
Postgre : il est de 63 caractètes (fichier pg_config_manual.h).
Cette vérification nous permet donc d'éviter le problème des injections et est utilisée dans chacun des scripts accèdant à la base.
Paramètres de connexion à la base
Un fichier de configuration avec les paramètres de connection à la base PostgreSQL est nécessaire . Ce fichier prend la forme suivante:
host=<host> user=<user> password=<password>
Les valeurs sont à remplacer par les votres. Par défaut les scripts qui
nécessite une connexion à la base utilisent le fichier .pgconn
dans le
répertoire courant. Il est possible de le changer avec le paramètre -f
(version longe --connexion-file
) de chacun des scripts.
Question 1: mettre en place des requêtes
Le script get_state_statistics
permet d'afficher des informations sur une
région en particulier. Il suffit de lui passer via l'option -t
(ou --state
en version longue) la région désirée. Il est aussi possible de lui demander une
année en particulier pour l'affichage des informations demographiques viam
l'option --year
comme pour l'exemple ci-dessous:
./get_states_statistics.py --state 'Nouvelle-Aquitaine' --year 1999
Question 2: ajouter des vues
C'est le script create_view.py
qui se charge de la création des deux vues. Il
est possible de tester les vues créer en les interrogeant avec l'option -t
(version longue --test
):
./create_view.py -t
Question 3: création d'une procédure
Le script create_procedure.py
permet de créer les éléments nécessaire à
l'exécution de la procédure stockée demandée: les colonnes dans les tables
région et département et la procédure. Avec l'option -c
(version longe
--call
) le script applique manuellement la procédure sur la base.
./create_procedure.py --call
Question 4: création d'un Trigger
Le script create_trigger.py
permet de mettre en place plusieurs chose:
- Le blocage de ma modification des éléments des tables département et région
- Le calcul de la population totale d'un département puis d'une région et la modification de la colonne dans ces même tables.
Pour la modification des colonnes, nous désactivons les triggers empêchant la modification de ces tables le temps de la modification puis les réactivons.
L'utilisation du script est simple:
./create_trigger.py