Big README update

This commit is contained in:
Yorick Barbanneau 2022-05-04 13:47:59 +02:00
parent 473a1a0878
commit 529727e78f

View file

@ -13,7 +13,7 @@ Il est vivement conseiller de faire fonctionner ce projet dans un
2. créer l'environnement virtuel: 2. créer l'environnement virtuel:
``` ```
cd projet_INSEE cd projet_INSEE
python -n venv .venv python -m venv .venv
source .venv/bin/activate source .venv/bin/activate
``` ```
3. intaller les prérequis: 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'installation est maintenant opérationnelle. Il faut penser à activer
l'environnement virtuel à chaque nouvelle ouverture d'un terminal. 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 ## 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 ## Consolider les fichiers bruts
C'est le script `csvprocess.py` qui se charge de l'analyse des fichiers `csv` 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 données et de l'importation des fichiers `csv` consolidés créés par le précédent
script. 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=<host> user=<user> password=<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 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`. `insee` mais peut être changé via le paramètre `--schema-name`.
@ -62,9 +77,37 @@ disponibles.
./createdatabase.py --help ./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 ## 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` 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 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 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 ./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
```