You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
Michaël Costa 99bd0f40fe Increment version [CI SKIP] 2 months ago
scrippy_db chore: Code cleaning 4 months ago
tests test: Updated DB schema (#7) 4 months ago
.bumpversion.cfg Increment version [CI SKIP] 2 months ago
.drone.yml chore: Remove all refs to GNC 2 months ago
.editorconfig Various config files 4 months ago
.flake8 Various config files 4 months ago
.gitignore First Jenkins build 4 months ago
.pylintrc Various config files 4 months ago
.yamllint Various config files 4 months ago
CONTRIBUTING.md chore: Remove all refs to GNC 2 months ago
LICENSE Various config files 4 months ago
Makefile chore: Remove all refs to GNC 2 months ago
README.md Increment version [CI SKIP] 2 months ago
requirements.txt First Jenkins build 4 months ago
scrippy-db.png First Jenkins build 4 months ago
setup.cfg Increment version [CI SKIP] 2 months ago
setup.py Various config files 4 months ago

README.md

version pylint Build Status License Language

Scrippy, mon ami le scrangourou

scrippy_db

Client de bases de données générique pour le cadriciel Scrippy.

Avertissement

Ce dépôt est un dépôt public librement distribué y compris sur Internet. Le code qu'il contient ainsi que l'ensemble des configurations et documentations ne doit pas contenir d'informations sensibles telles que, et sans se limiter à, mots de passe et clefs privées.

Prérequis

Modules Python

Liste des modules nécessaires

  • psycopg2-binary
  • cx-Oracle

Installation

Manuelle

git clone https://git.mcos.nc/scrippy/scrippy-db.git
cd scrippy-db.git
sudo python3 -m pip install -r requirements.txt
make install

Avec pip

sudo pip3 install scrippy-db

Utilisation

Le module scrippy_db.db propose l'objet Db dont l'objectif est d'offrir les fonctionnalités liées à l'utilisation d'une base de données.

La connexion à une base de données peut se faire soit en fournissant directement les paramètres de connexion (username, host, database, port, password) au constructeur soit en fournissant le nom du service sur lequel se connecter.

Le paramètre db_type permet de spécifier le type de base de données (postgres ou oracle). La valeur par défaut de ce paramètre est postgres.

L'exécution d'une requête est effectuée avec la méthode Db.execute() qui accepte les paramètres suivants:

  • request: La requête en elle même (obligatoire)
  • params: Les paramètres de la requête dans l'ordre exact de leur apparition au sein de la requête (optionnel)
  • verbose: Booléen indiquant si la requête et son résultat doivent apparaître dans le log. Le niveau de log doit positionné a minima à info.

Une requête peut comporter un ou plusieurs paramètres variables nécessitant l'adaptation de la requête à ces paramètres.

Dans un soucis de sécurité certaines pratiques sont strictement à proscrire et d'autres doivent impérativement être appliquées.

Les paramètres d'une requête doivent être passés dans un tuple à la méthode Db.execute() qui se chargera de vérifier la validité des vos paramètres.

N'essayez jamais de gérer vous même l'interpolation des paramètres à l'intérieur de la requête

Exemple

Récupération de données et mise à jour conditionnelle de la base.

from scrippy_db import db

db_user = "harry.fink"
db_password = "dead_parrot"
db_host = "flying.circus"
db_port = "5432"
db_base = "monty_python"
app_name = "spanish_inquisition"
app_version "0.42.0"
app_status = "Deployed"

date = datetime.datetime.now().strftime('%Y%m%d %H:%M:%S')

with db.Db(username=db_user, host=db_host, port=db_port, database=db_base,  password=db_password) as database:
  # Vérification de l'état de l'application
  req = "select app_status, app_version, date from apps where app_name=%s;"
  params = (app_name,)
  current_status = database.execute(req, params, verbose=True)
  if current_status != None:
    # L'application est déjà enregistrée, on affiche son statut actuel
    # On met à jour son statut
    req = "insert into apps (app_name, app_version, app_status, date) values (%s, %s, %s, %s);"
    params = (app_name, app_version, app_status, date)
    result = database.execute(req, params, verbose=True)
  else:
    # L'application n'a jamais été enregistrée, on enregistre l'application et son statut.
    req = "insert into apps (app_name, app_version, app_status, date) values (%s, %s, %s, %s);"
    params = (app_name, app_version, app_status, date)
    result = database.execute(req, params, verbose=True)