Skip to content

Navigation Menu

Sign in
Sign up

Latest commit

History

19 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Async SQLite Queue

PyPI version License: MIT

Une librairie Python simple et robuste pour interagir avec une base de données SQLite de manière thread-safe, en déportant toutes les opérations d'écriture dans un thread dédié pour ne pas bloquer votre application principale.

🚀 Fonctionnalités

  • Écritures non-bloquantes : Les INSERT, UPDATE, DELETE sont ajoutés à une file et exécutés en arrière-plan.
  • Thread-Safe : Gérez vos accès à SQLite depuis plusieurs threads sans corruption de données.
  • API simple : Des méthodes claires (execute_write, execute_read) pour une prise en main immédiate.
  • Mode WAL activé : Active automatiquement le mode "Write-Ahead Logging" pour une meilleure concurrence entre les lectures et les écritures.
  • Support In-Memory partagé : Utilise automatiquement file::memory:?cache=shared pour les bases de données en mémoire accessibles par plusieurs threads.
  • Aucune dépendance externe : Repose uniquement sur la bibliothèque standard de Python.

📦 Installation

pip install python-sqlite-async

💡 Utilisation

Voici un exemple simple pour démarrer, écrire des données de manière asynchrone, et les lire de manière synchrone.

import time
import logging
from python_sqlite_async import AsyncSQLite
# Configurez le logging pour voir ce qui se passe
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(threadName)s - %(message)s')
# 1. Initialisez le manager de base de données (sur disque ou en mémoire)
db = AsyncSQLite(db_path="my_app.db")
# 2. Démarrez le worker en arrière-plan
# Vous pouvez aussi passer un script de migration qui ne s'exécutera que si la table "users" n'existe pas.
# db.start(migration_script_path="schema.sql", check_table="users")
db.start()
# 3. Attendez que la base de données soit prête (essentiel au démarrage d'une app)
if not db.wait_for_ready():
 raise RuntimeError("La base de données n'a pas pu s'initialiser.")
print("La base de données est prête !")
# 4. Exécutez des écritures (non-bloquant)
db.execute_write("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT, email TEXT)")
db.execute_write("INSERT INTO users (name, email) VALUES (?, ?)", ("Alice", "alice@example.com"))
db.execute_write("INSERT INTO users (name, email) VALUES (?, ?)", ("Bob", "bob@example.com"))
print("Opérations d'écriture mises en file.")
# Laissez un peu de temps au worker pour traiter la file
time.sleep(0.1)
# 5. Lisez les données (bloquant, retourne les résultats immédiatement)
users = db.execute_read("SELECT name, email FROM users ORDER BY name")
print("\nUtilisateurs trouvés :")
for user in users:
 print(f"- {user[0]} ({user[1]})")
# 6. Arrêtez proprement le worker à la fin de votre application
db.stop()
print("\nWorker arrêté.")

🔧 Développement

Pour contribuer ou lancer les tests localement :

# Clonez le dépôt
git clone [https://github.com/venantvr-pubsub/Python.SQLite.Async.git](https://github.com/venantvr-pubsub/Python.SQLite.Async.git)
cd Python.SQLite.Async
# 1. Installez l'environnement et les dépendances
make install
# 2. Activez l'environnement virtuel
source .venv/bin/activate
# 3. Lancez les tests
make test
# Autres commandes utiles
make format # Formate le code
make lint # Vérifie la qualité du code
make build # Construit les paquets pour la distribution

📄 Licence

Ce projet est sous licence MIT.

Stack

Stack

About

Wrapper SQLite non-bloquant thread-safe (PyPI: python-sqlite-async), écritures en thread dédié

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle によって変換されたページ (->オリジナル) /