projet_INSEE/README.md

157 lines
5 KiB
Markdown

Projet INSEE -- base de données avancée
---------------------------------------
## Installation
Il est vivement conseiller de faire fonctionner ce projet dans un
**environnement virtuel python** :
1. cloner le dépôt de code suivant:
```
git clone https://git.epha.se/ephase/projet_INSEE
```
2. créer l'environnement virtuel:
```
cd projet_INSEE
python -m venv .venv
source .venv/bin/activate
```
3. 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:
```sh
./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.
```sh
./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
```