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= 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'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 ```