Complete SQL Database System in Python with AI Integration
Project description
GSQL - Une interface Python avancée pour SQLite 🔧
Développé par gopu.inc | Statut : Bêta Active - En développement
🚨 État du Projet & Transparence
GSQL est un projet en développement actif (version bêta). Il n'est pas encore prêt pour une utilisation en production critique.
Ce que GSQL est VRAIMENT :
- ✅ Une surcouche Python puissante pour SQLite avec un shell interactif, un cache et des outils de productivité.
- ✅ Un projet open-source qui évolue rapidement grâce à la communauté.
Bugs & Limitations Actuelles (à connaître avant d'utiliser) :
- 🔸 Transactions : L'API transactionnelle native (
db.begin_transaction()) a des bugs. Il faut utiliser les commandes SQL brutesBEGIN/COMMIT(un workaround est fourni ci-dessous). - 🔸 Guillemets : Certains caractères dans les chaînes peuvent causer des problèmes de parsing dans le shell interactif.
- 🔸 Fonctionnalités expérimentales : Les modules NLP (
gsql.nlp) et les backends de stockage alternatifs (YAML, mémoire) sont en prototype et non stabilisés.
Notre philosophie : Apporter la productivité du Python et la clarté d'une interface moderne à la robustesse de SQLite.
📦 Installation Rapide
Via pip (recommandé pour tester)
pip install gsql
Via Conda (à partir du canal gopu-inc)
conda install -c gopu-inc gsql
Depuis les sources (pour les contributeurs)
git clone https://github.com/gopu-inc/gsql.git
cd gsql
pip install -e .
Avec Docker
docker pull ceoseshell/gsql:latest
docker run -it ceoseshell/gsql --help
🚀 Utilisation en 30 secondes
- Lancer le Shell Interactif (CLI)
C'est le moyen le plus simple de découvrir GSQL.
gsql
# > Bienvenue dans le shell GSQL. Tapez 'help' pour les commandes.
# gsql> .tables
# gsql> SELECT * FROM sqlite_master;
- Utilisation dans un Script Python
Voici comment intégrer GSQL correctement dans votre code aujourd'hui.
from gsql.database import Database
# 1. INITIALISATION : Créez une instance de la base de données.
# Pour les tests, utilisez ':memory:'. Pour un fichier, donnez un chemin.
db = Database(db_path=":memory:", enable_wal=True, auto_recovery=True)
# 2. EXÉCUTION DE REQUÊTES : Utilisez la méthode .execute()
# Créer une table
db.execute("""
CREATE IF NOT EXISTS EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT UNIQUE NOT NULL,
email TEXT
)
""")
# Insérer des données (toujours avec des paramètres pour la sécurité)
db.execute(
"INSERT INTO users (username, email) VALUES (?, ?)",
["jdoe", "john.doe@example.com"]
)
# Sélectionner des données
result = db.execute("SELECT * FROM users", use_cache=True)
print(f"Trouvé {result['count']} utilisateur(s).")
for row in result['rows']:
print(f"- {row['id']}: {row['username']}")
# 3. GESTION DES TRANSACTIONS : UTILISEZ CE WORKAROUND
# ⚠️ N'utilisez PAS db.begin_transaction(). Utilisez les commandes SQL directes.
try:
# Début de la transaction
db.execute("BEGIN IMMEDIATE TRANSACTION")
# Vos opérations atomiques
db.execute("UPDATE accounts SET balance = balance - 100 WHERE id = 1")
db.execute("UPDATE accounts SET balance = balance + 100 WHERE id = 2")
# Si tout est bon, validez
db.execute("COMMIT")
print("Virement effectué avec succès.")
except Exception as e:
# En cas d'erreur, annulez tout
db.execute("ROLLBACK")
print(f"Échec du virement : {e}")
# 4. UTILISER LES COMMANDES SPÉCIALES GSQL
# Ces commandes fonctionnent à la fois dans le shell ET via .execute().
stats = db.execute("STATS") # Récupère des statistiques d'utilisation
print(stats.get('message'))
# 5. FERMETURE PROPRE
db.close()
🛠️ Fonctionnalités Stables et Prêtes à l'Emploi
✅ Fonctionnalités Principales Totalement Opérationnelles
· Shell Interactif : Auto-complétion, historique, coloration syntaxique, affichage tabulaire. · Cache Intelligent (LRU) : Accélère les requêtes SELECT répétitives jusqu'à 20x. · Commande Spéciales Intégrées :
.tables -- Liste les tables
.schema <table> -- Montre la structure d'une table
STATS; -- Affiche les stats de performance et de cache
VACUUM; -- Optimise la base de données
HELP; -- Affiche l'aide
· Support SQL Complet : Tout ce que SQLite supporte (SELECT, INSERT, JOIN, etc.) passe par GSQL. · Gestion des Erreurs : Messages d'erreur détaillés avec suivi de pile.
🔧 Fonctionnalités en Développement/Expérimentales
· Module NLP (gsql.nlp) : Traduction du langage naturel en SQL. Instable. · Autres Backends : Stockage YAML ou en mémoire. Non recommandé pour les données importantes.
📁 Structure du Projet (Pour Contributeurs)
gsql/
├── gsql/
│ ├── __init__.py # Point d'entrée principal
│ ├── database.py # CLASSE PRINCIPALE `Database`
│ ├── storage.py # Abstraction du stockage (SQLite)
│ ├── executor.py # Exécuteur et cache des requêtes
│ ├── cli.py # Interface du Shell Interactif
│ └── exceptions.py # Exceptions personnalisées
├── tests/ # Suite de tests
├── meta.yaml # Recette de construction Conda
├── setup.py # Configuration pour pip
├── Dockerfile # Configuration pour le conteneur
└── README.md # Ce fichier
Classe Principale : gsql.database.Database Point d'Entrée CLI : gsql.cli.main() (accessible via la commande gsql)
🧪 Exécuter les Tests et Contribuer
Nous avons besoin de votre aide pour stabiliser le projet !
# 1. Clonez et installez en mode développement
git clone https://github.com/gopu-inc/gsql.git
cd gsql
pip install -e .[dev] # Installe les dépendances de test
# 2. Exécutez la suite de tests existante
pytest tests/ -v
# 3. Vérifiez la couverture de code et le style
coverage run -m pytest tests/
coverage report
flake8 gsql/ # Vérification du style PEP8
Comment contribuer ?
- Signaler un bug : Ouvrez une issue sur GitHub en décrivant précisément le problème, la version de GSQL, et un exemple de code minimal pour le reproduire.
- Proposer une amélioration : Discutez-en d'abord dans une issue.
- Soumettre une correction (PR) : Fork, branche, code, tests, pull request.
❓ FAQ & Dépannage
Q : db.begin_transaction() ne marche pas, que faire ? R : C'est un bug connu. Utilisez toujours db.execute("BEGIN TRANSACTION") et db.execute("COMMIT") ou db.execute("ROLLBACK"). Voir l'exemple de code plus haut.
Q : Le shell plante avec une erreur de parsing ? R : Évitez les guillemets complexes ou les caractères spéciaux dans les chaînes en mode interactif pour l'instant. Utilisez un script Python pour les requêtes complexes.
Q : Comment migrer de SQLite brut vers GSQL ? R : Pointez simplement le paramètre db_path vers votre fichier .db SQLite existant. GSQL le lira directement.
📄 Licence
Ce projet est publié sous la licence MIT. Voir le fichier LICENSE pour plus de détails.
GSQL © 2025 Gopu Inc. | Apportons une interface moderne à SQLite.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file gsql-3.9.7.tar.gz.
File metadata
- Download URL: gsql-3.9.7.tar.gz
- Upload date:
- Size: 115.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f85bf65d486925c415bd847a3017d7a27e825683c2ee586af352df493e9cf5c7
|
|
| MD5 |
671fdb254716347a2b0d7a9244efba2f
|
|
| BLAKE2b-256 |
51492cd8f9c2f5dcd301c914ffce46a89ec3e3bba992a4a18ad807b7d86577c5
|
File details
Details for the file gsql-3.9.7-py3-none-any.whl.
File metadata
- Download URL: gsql-3.9.7-py3-none-any.whl
- Upload date:
- Size: 109.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cc62c9f2760fd0f10de3b3b6d0236ee6c30e28a774412fd55de10cacc0897f2b
|
|
| MD5 |
f081bd84be8dee378310e6f2abcb60c5
|
|
| BLAKE2b-256 |
3efe35a4ddb68870669dc15f726a4108f909b0f0bbe3932ee210d384ee9aae94
|