DBWarden
Compilateur de schéma déclaratif qui dérive des migrations de bases de données déterministes à partir de modèles SQLAlchemy.
Vos modèles sont le code source. SQL est la sortie.
Chargement des derniers commits…
Backends de base de données
5
Plugins officiels
7
Fichiers de tests
166
Version
v0.20.10
Problème
Les outils de gestion de schéma se répartissent en deux camps. Des outils impératifs vous permettent de créer des modifications : des scripts de révision qui décrivent comment passer d'une version de schéma à la suivante. Les outils déclaratifs vous permettent de créer l'état souhaité et d'en dériver les modifications pour vous. La plupart des outils impératifs vous demandent de conserver deux représentations de votre schéma : vos modèles ORM et vos fichiers de migration. Lorsqu'ils dérivent, vous le découvrez au moment du déploiement.
Pourquoi c'est dur
La dérive des schémas est le principal ennemi. Rendre cela déterministe nécessite un moteur de comparaison qui gère les renommages, les modifications de type, les modifications de contraintes et le classement sur cinq backends de bases de données avec différents dialectes DDL. Chaque migration doit comporter à la fois une mise à niveau et une restauration SQL, et la restauration doit être testée par rapport à la base de données réelle.
Capacités
Analyse d'impact
dbwarden check-impact scanne le code avec une analyse AST et un fallback grep, puis liste chaque référence à une colonne ou table modifiée par une migration avant le déploiement.
Génération hors ligne
Exportez l'état des modèles une fois, puis générez des migrations en CI ou sur une machine sans base de données avec make-migrations --offline.
Snapshots de schéma
Chaque migration écrit un snapshot JSON avec checksum. Les snapshots alimentent la détection de renommages, les diffs hors ligne et les comparaisons au niveau colonne.
Meta typé
Une métaclasse valide chaque attribut de class Meta à l'import ; les fautes de frappe qui produiraient un DDL incorrect lèvent DBWardenConfigError immédiatement.
Ingénierie inverse
Générez des modèles SQLAlchemy depuis une base vivante avec generate-models, métadonnées backend et import --base personnalisé inclus.
Multi-base
Un projet peut cibler plusieurs bases avec des configurations isolées, une propriété de tables par base et des bases optionnelles ignorées si absentes.
Flux de travail
- 01
Pointez sur les modèles existants
DBWarden lit vos modèles SQLAlchemy comme source unique de vérité.
- 02
faire des migrations
Génère un schéma de base ou des différences par rapport à l'état actuel de la base de données.
- 03
Validation générée SQL
Fichiers SQL simples : révisables, validables, exécutables n'importe où.
- 04
émigrer
S'applique aux migrations en attente avec vérification de convergence.
- 05
En option : analyse d'impact, mode hors ligne, plugins
Détection des changements de rupture basée sur AST, CI sans base de données, intégration seed/RBAC/FastAPI.
Décisions clés
SQL-première sortie
Les migrations sont de simples fichiers SQL. Pas de runtime, pas de Python généré. Révisable, validable, exécutable n’importe où.
Différence déterministe
Mêmes modèles + même instantané = même migration. Toujours. Pas d'état caché, pas de dépendances d'ordre.
Contrat de restauration strict
Chaque migration implique une mise à niveau + une restauration SQL. Restauration de l'espace réservé refusée par défaut.
Architecture des plugins
7 plugins officiels pour les graines, RBAC, FastAPI, les tests sandbox et les extensions PostgreSQL/ClickHouse.
Modèle de sécurité
La génération de migrations classe chaque opération, découpe les changements de type en étapes expand-contract et attribue une sévérité. La CLI ajoute des plafonds d'exécution, des contrôles de plans en attente et des rapports d'impact structurés, pour arrêter un changement destructif avant la production.
L'historique reste auditable : snapshots avec checksum, migrations répétables, réconciliation de merges et support du rebase. Les rollbacks sont générés lorsqu'ils sont sûrs ; les changements irréversibles exigent une déclaration explicite au lieu d'un placeholder.
Contraintes
- Aucun runtime de migration à installer ou à versionner
- Aucun script Python généré qui fait discrètement la mauvaise chose
- Aucune dérive de schéma découverte en production
- Migrations pouvant être générées dans CI sans connexion à une base de données
Bases de données prises en charge
| Base de données | Round-trip | Notes |
|---|---|---|
| PostgreSQL | Full | Colonnes identity/générées, partitioning, héritage, contraintes d’exclusion, types enum et index avancés. |
| MySQL | Full | Parité DDL, options engine/charset/collation, colonnes unsigned et on-update. |
| ClickHouse | Full | Famille MergeTree, moteurs répliqués, projections, dictionnaires, vues matérialisées et index skip. |
| SQLite | Full | WITHOUT ROWID/STRICT, colonnes générées et reconstruction de tables pour les ALTER non pris en charge. |
| MariaDB | Partial | Couche de schéma complète ; des lacunes subsistent pour les snapshots et l’ingénierie inverse. |
Round-trip signifie modèle → SQL → base vivante → validation du modèle.
État
Alpha stable : pré-1.0 mais prêt pour la production. Aucun changement incompatible n'est publié sans une fenêtre de dépréciation de 3 mois.
Harnais de test
Le harnais de tests dbwarden-harness est une suite de validation autonome en boîte noire. Il installe DBWarden en tant que consommateur, appelle son CLI public, crée des instances de base de données réelles jetables via Testcontainers et vérifie que le SQL compilé produit le schéma correct. Il ne s'agit pas d'une suite de tests unitaires ; il s'agit d'une limite de certification de version.
Écosystème
Le compilateur est au centre d’un ensemble d’outils versionnés indépendamment.
wlite
CLI + fixationsGestion déclarative du schéma SQLite sans la surcharge Python. La même philosophie que DBWarden, réduite à ce que SQLite et C peuvent faire seuls.
libwlite
bibliothèque CMoteur SQLite de DBWarden extrait en tant que bibliothèque C autonome. Analyse les fichiers de modèle .wlite, gère les bases de données, compare les schémas et génère des migrations.
dbwarden-harness
Certification de sortieValidation boîte noire autonome sur cinq bases de données réelles : installation PyPI, contrat CLI, application de migration, restauration et découverte de plugins.
dbwarden-redis
Verrouillage des migrationsVerrouillage distribué des migrations avec Redis pour les déploiements concurrents.
dbwarden-fastapi
Intégration webDépendances de session FastAPI, health endpoints et routes de migration.
dbwarden-ch-rbac
RBAC ClickHouseRôles, utilisateurs, grants, politiques de lignes, quotas et profils de settings pour ClickHouse.
dbwarden-pgsql-types
Types PostgresENUMs, domaines, types composites et séquences personnalisées.
dbwarden-pgsql-rbac
RBAC PostgresRôles, grants, privilèges par défaut et politiques de sécurité au niveau des lignes.
dbwarden-pgsql-extensions
Extensions PostgresExtensions, event triggers, fonctions, triggers et paramètres de stockage.
dbwarden-plugin-template
Modèle de pluginÉchafaudage pour construire et tester de nouveaux plugins DBWarden.
dbwarden-seeds
Données de seedGestion de seeds par code et fichiers avec apply et rollback.
dbwarden-sandbox
Tests sandboxFournisseurs Testcontainers pour rejouer les migrations en sécurité.
Compromis
- Nécessite SQLAlchemy 2.0+ (non compatible avec les anciens modèles)
- La compilation de schéma ajoute une étape de construction par rapport à la migration d'exécution
- L’approche déclarative signifie moins de contrôle sur l’ordre des migrations