Skip to main content

Provide usefully SQL classes and functions to execute SQL queries step by step

Project description

QueryCraft

[TOC]

Le nom ?

Un nom en anglais qui évoque l'idée de "façonner" ou "construire" des requêtes SQL de manière intuitive, parfait pour une approche pédagogique. (GPT 4o ;-) )

Objectifs

L'objectif de cette bibliothèque est de proposer des classes Python permettant de manipuler des requêtes SQL. Elle propose aussi des applications pour décomposer l'exécution d'une requête SQL sur une base de données PostgreSQL, MySQL ou SQLite.

Fonctionnalités

  • Analyse de requêtes SQL : Analysez et comprenez la structure de vos requêtes SQL.
  • Décomposition de requêtes : Décomposez vos requêtes SQL en étapes simples pour une meilleure compréhension.
  • Support multi-SGBD : Compatible avec PostgreSQL, MySQL et SQLite.
  • Interface en ligne de commande : Utilisez l'application en ligne de commande pour analyser et décomposer vos requêtes SQL.
  • Aide de l'IA : Comprenez vos erreurs SQL grâce à l'aide de l'IA.

Limitations

Limitations liées à SQL et aux SGBD

  • Opérateurs SQL non couverts : Certains opérateurs SQL avancés peuvent ne pas être entièrement pris en charge, en particulier les opérateurs ensemblistes. Par exemple, les opérateurs INTERSECT, EXCEPT et UNION ne sont pas pris en charge. Les sous-requêtes dans le 'From' sont prises en charges, mais pas les sous-requêtes dans le 'Where', le 'Having' et le 'Select' (pas de pas à pas possible).
  • Support limité des fonctions SQL : Certaines fonctions SQL avancées peuvent ne pas être entièrement prises en charge.
  • Compatibilité avec les versions de SGBD : La compatibilité avec les versions spécifiques de PostgreSQL, MySQL et SQLite peut varier.

Problème avec la version de Python

QueryCraft fonctionne avec Python 3.11. A ce jour (13/03/2025), une bibliothèque (psycopg2) pose des problèmes avec Python 3.12. Il est donc préférable de rester pour l'instant sur la version 3.11.

Installation

Après téléchargement depuis Gitlab :

git clone https://gitlab.univ-nantes.fr/ls2n-didactique/querycraft.git
cd querycraft
pip install -e .

Sans téléchargement depuis Gitlab :

pip install querycraft

Mise à jour

pip install --upgrade querycraft  

Usage

PostgreSQL

Application qui permet de décomposer l'exécution d'une requête SQL sur une base de données PostgreSQL.

usage: pgsql-sbs [-h] [-d DB] [-u USER] [-p PASSWORD] [--host HOST] [--port PORT] [--debug] [-v] [-f FILE | -s SQL]

options:
  -h, --help            show this help message and exit
  -d DB, --db DB        database name
  -u USER, --user USER  database user
  -p PASSWORD, --password PASSWORD
                        database password
  --host HOST           database host
  --port PORT           database port
  -v, --verbose         verbose mode
  -f FILE, --file FILE  sql file
  -s SQL, --sql SQL     sql string

Par exemple :

pgsql-sbs -s 'select * from etudiants join notes using(noetu);'   

==================================================================================================
select * FROM  #etudiants#  JOIN notes USING (noetu) ;
┌─────────────────┬───────────────┬──────────────────┐
│ etudiants.noetu ┆ etudiants.nom ┆ etudiants.prenom │
╞═════════════════╪═══════════════╪══════════════════╡
│ 28936E          ┆ Dupont        ┆ Franck           │
│ 46283B          ┆ Dupont        ┆ Isabelle         │
│ 86719E          ┆ Martin        ┆ Adrien           │
│ 99628C          ┆ Robert        ┆ Adrien           │
│ 99321C          ┆ Denou         ┆ Michelle         │
│ 99322C          ┆ Dupont        ┆ Isabelle         │
└─────────────────┴───────────────┴──────────────────┘

==================================================================================================
select * FROM etudiants JOIN  #notes#  USING (noetu) ;
┌─────────────┬───────────────┬──────────────┬──────────────┐
│ notes.noetu ┆ notes.codemat ┆ notes.noteex ┆ notes.notecc │
╞═════════════╪═══════════════╪══════════════╪══════════════╡
│ 99628C      ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B      ┆ MIAS2I5       ┆ 9.5          ┆ 2.0          │
│ 86719E      ┆ IUP2MA        ┆ 12.0         ┆ 5.5          │
│ 99321C      ┆ LIL6          ┆ 18.0         ┆ 16.5         │
│ 28936E      ┆ MIAS2I5       ┆ 13.5         ┆ 13.5         │
│ 86719E      ┆ IUP2IS        ┆ 8.5          ┆ 10.0         │
│ 99321C      ┆ LIL5          ┆ 15.0         ┆ 14.5         │
│ 99322C      ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B      ┆ MIAS2I6       ┆ 8.0          ┆ 12.0         │
│ 99628C      ┆ MIAS2I6       ┆ 3.0          ┆ 7.0          │
│ 28936E      ┆ MIAS2I6       ┆ 12.0         ┆ null         │
└─────────────┴───────────────┴──────────────┴──────────────┘

==================================================================================================
select * FROM  #etudiants JOIN notes USING (noetu)#  ;
┌─────────────────┬───────────────┬──────────────────┬───────────────┬──────────────┬──────────────┐
│ etudiants.noetu ┆ etudiants.nom ┆ etudiants.prenom ┆ notes.codemat ┆ notes.noteex ┆ notes.notecc │
╞═════════════════╪═══════════════╪══════════════════╪═══════════════╪══════════════╪══════════════╡
│ 99628C          ┆ Robert        ┆ Adrien           ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I5       ┆ 9.5          ┆ 2.0          │
│ 86719E          ┆ Martin        ┆ Adrien           ┆ IUP2MA        ┆ 12.0         ┆ 5.5          │
│ 99321C          ┆ Denou         ┆ Michelle         ┆ LIL6          ┆ 18.0         ┆ 16.5         │
│ 28936E          ┆ Dupont        ┆ Franck           ┆ MIAS2I5       ┆ 13.5         ┆ 13.5         │
│ 86719E          ┆ Martin        ┆ Adrien           ┆ IUP2IS        ┆ 8.5          ┆ 10.0         │
│ 99321C          ┆ Denou         ┆ Michelle         ┆ LIL5          ┆ 15.0         ┆ 14.5         │
│ 99322C          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I6       ┆ 8.0          ┆ 12.0         │
│ 99628C          ┆ Robert        ┆ Adrien           ┆ MIAS2I6       ┆ 3.0          ┆ 7.0          │
│ 28936E          ┆ Dupont        ┆ Franck           ┆ MIAS2I6       ┆ 12.0         ┆ null         │
└─────────────────┴───────────────┴──────────────────┴───────────────┴──────────────┴──────────────┘

==================================================================================================
select  #* FROM etudiants JOIN notes USING (noetu)#  ;
┌─────────────────┬───────────────┬──────────────────┬───────────────┬──────────────┬──────────────┐
│ etudiants.noetu ┆ etudiants.nom ┆ etudiants.prenom ┆ notes.codemat ┆ notes.noteex ┆ notes.notecc │
╞═════════════════╪═══════════════╪══════════════════╪═══════════════╪══════════════╪══════════════╡
│ 99628C          ┆ Robert        ┆ Adrien           ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I5       ┆ 9.5          ┆ 2.0          │
│ 86719E          ┆ Martin        ┆ Adrien           ┆ IUP2MA        ┆ 12.0         ┆ 5.5          │
│ 99321C          ┆ Denou         ┆ Michelle         ┆ LIL6          ┆ 18.0         ┆ 16.5         │
│ 28936E          ┆ Dupont        ┆ Franck           ┆ MIAS2I5       ┆ 13.5         ┆ 13.5         │
│ 86719E          ┆ Martin        ┆ Adrien           ┆ IUP2IS        ┆ 8.5          ┆ 10.0         │
│ 99321C          ┆ Denou         ┆ Michelle         ┆ LIL5          ┆ 15.0         ┆ 14.5         │
│ 99322C          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I5       ┆ 12.0         ┆ 15.5         │
│ 46283B          ┆ Dupont        ┆ Isabelle         ┆ MIAS2I6       ┆ 8.0          ┆ 12.0         │
│ 99628C          ┆ Robert        ┆ Adrien           ┆ MIAS2I6       ┆ 3.0          ┆ 7.0          │
│ 28936E          ┆ Dupont        ┆ Franck           ┆ MIAS2I6       ┆ 12.0         ┆ null         │
└─────────────────┴───────────────┴──────────────────┴───────────────┴──────────────┴──────────────┘

MySQL

Il est aussi possible d'utiliser MySQL :

usage: mysql-sbs [-h] [-d DB] [-u USER] [-p PASSWORD] [--host HOST] [--port PORT] [--debug] [-v] [-f FILE | -s SQL]

options:
  -h, --help            show this help message and exit
  -d DB, --db DB        database name
  -u USER, --user USER  database user
  -p PASSWORD, --password PASSWORD
                        database password
  --host HOST           database host
  --port PORT           database port
  -v, --verbose         verbose mode
  -f FILE, --file FILE  sql file
  -s SQL, --sql SQL     sql string

SQLite

ou SQLite :

usage: sqlite-sbs [-h] [-d DB] [--debug] [-v] [-f FILE | -s SQL]

options:
  -h, --help            show this help message and exit
  -d DB, --db DB        database name
  -v, --verbose         verbose mode
  -f FILE, --file FILE  sql file
  -s SQL, --sql SQL     sql string

LRS

L'outil peut être interfacé avec un LRS compatible XAPI (testé avec Veracity ; https://lrs.io/home ; https://lrs.io/home/download).
Il suffit de spécifier les paramètres de connection à travers les paramètres "--lrs-*". L'activation elle-même est donnée par le paramètre "--lrs".

Aide de l'IA

Pour bénéficier de l'aide de l'IA, il faut installer Ollama (https://ollama.com/), récupérer le modèle de langage "codellama:7b" (modèle par défaut) puis lancer le serveur Ollama. Soit :

ollama pull codellama:7b
ollama serve

NB : pour l'instant, le modèle n'est pas facilement modifiable. Il est possible de le changer dans le code source. Il suffit pour cela d'aller dans le fichier "querycraft/config/config-sbs.cfg", de trouver la section "IA" puis de modifier la valeur de la clé "model".

Article de recherche et conférences

Génération de la documentation

pdoc3 --html --force -o doc querycraft

Remerciements

  • Wiktoria SLIWINSKA, étudiante ERASMUS en licence Informatique à l'Université de Nantes en 2023-2024, pour son aide à la conception du POC initial.

Autres sites

Sur PyPi : https://pypi.org/project/querycraft/

HAL (pour citer dans une publication) : https://hal.science/hal-04964895

Licence

(C) E. Desmontils, Nantes Université, 2024, 2025

Ce logiciel est distribué sous licence GPLv3.

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

querycraft-0.0.45.tar.gz (53.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

querycraft-0.0.45-py3-none-any.whl (48.6 kB view details)

Uploaded Python 3

File details

Details for the file querycraft-0.0.45.tar.gz.

File metadata

  • Download URL: querycraft-0.0.45.tar.gz
  • Upload date:
  • Size: 53.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for querycraft-0.0.45.tar.gz
Algorithm Hash digest
SHA256 e6b6791caa61d1e85df3505ab647f629020cc4d1beddc505f05f206cf247610c
MD5 27c7a4468fafe229d11f525bcf4db9b5
BLAKE2b-256 c3885340aec63b909f2ada059ad874a7f71c5bafb2ef6156b33917347f5ca38b

See more details on using hashes here.

File details

Details for the file querycraft-0.0.45-py3-none-any.whl.

File metadata

  • Download URL: querycraft-0.0.45-py3-none-any.whl
  • Upload date:
  • Size: 48.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for querycraft-0.0.45-py3-none-any.whl
Algorithm Hash digest
SHA256 66441ddf258c83474b09ce403fa662277d01f730041e97047b84f537a6acdf11
MD5 3230df414a52e96bd24366f66df5dbda
BLAKE2b-256 bb9742a404f0d323ad9fd5aa219f9aceccf2167bf677ec1e9a0c3405508702c4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page