From 529727e78f101a5f0957c3e0fee1b27390095a48 Mon Sep 17 00:00:00 2001 From: Yorick Barbanneau Date: Wed, 4 May 2022 13:47:59 +0200 Subject: [PATCH] Big README update --- README.md | 81 ++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 71 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b47e7df..eade64a 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ Il est vivement conseiller de faire fonctionner ce projet dans un 2. créer l'environnement virtuel: ``` cd projet_INSEE - python -n venv .venv + python -m venv .venv source .venv/bin/activate ``` 3. intaller les prérequis: @@ -23,8 +23,31 @@ Il est vivement conseiller de faire fonctionner ce projet dans un 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` @@ -43,14 +66,6 @@ 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. -Ce script nécessite un fichier de configuration avec les paramètres de -connection à la base PostgreSQL. Ce fiochier prend la forme suivante: - -``` -host= user= password= -``` - -Les valeurs sont à remplacer par les votres. 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`. @@ -62,9 +77,37 @@ 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= user= 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'affichier des informations sur une +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 @@ -94,3 +137,21 @@ région et département et la procédure. Avec l'option `-c` (version longe ``` ./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 +```