01Infrastructure de base de données

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.

Python 3.12+SQLAlchemy 2.0PostgreSQLMySQLMariaDBSQLiteClickHouse
Dernier commit du dépôt

Chargement des derniers commits…

Backends de base de données

5

Plugins officiels

7

Fichiers de tests

166

Version

v0.20.10

01

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.

02

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.

03

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.

04

Flux de travail

  1. 01

    Pointez sur les modèles existants

    DBWarden lit vos modèles SQLAlchemy comme source unique de vérité.

  2. 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.

  3. 03

    Validation générée SQL

    Fichiers SQL simples : révisables, validables, exécutables n'importe où.

  4. 04

    émigrer

    S'applique aux migrations en attente avec vérification de convergence.

  5. 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.

05

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.

06

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.

07

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
08

Bases de données prises en charge

Bases de données prises en charge
Base de donnéesRound-tripNotes
PostgreSQLFullColonnes identity/générées, partitioning, héritage, contraintes d’exclusion, types enum et index avancés.
MySQLFullParité DDL, options engine/charset/collation, colonnes unsigned et on-update.
ClickHouseFullFamille MergeTree, moteurs répliqués, projections, dictionnaires, vues matérialisées et index skip.
SQLiteFullWITHOUT ROWID/STRICT, colonnes générées et reconstruction de tables pour les ALTER non pris en charge.
MariaDBPartialCouche 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.

09

É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.

10

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.

Couverture du harnais
Installation de PyPIPASS
Contrat CLIPASS
5 fournisseurs de bases de donnéesPASS
Demande de migrationPASS
Application des contraintesPASS
Silence de régénérationPASS
Restauration/récupérationPASS
Découverte de pluginsPASS
11

Écosystème

Le compilateur est au centre d’un ensemble d’outils versionnés indépendamment.

wlite

CLI + fixations

Gestion 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.

C++RustPythonGoC#Zig
Source ↗

libwlite

bibliothèque C

Moteur 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.

C11SQLite3
Source ↗

dbwarden-harness

Certification de sortie

Validation 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.

PythonDockerTestcontainers
Source ↗

dbwarden-redis

Verrouillage des migrations

Verrouillage distribué des migrations avec Redis pour les déploiements concurrents.

PythonRedis
Source ↗

dbwarden-fastapi

Intégration web

Dépendances de session FastAPI, health endpoints et routes de migration.

PythonFastAPI
Source ↗

dbwarden-ch-rbac

RBAC ClickHouse

Rôles, utilisateurs, grants, politiques de lignes, quotas et profils de settings pour ClickHouse.

PythonClickHouse
Source ↗

dbwarden-pgsql-types

Types Postgres

ENUMs, domaines, types composites et séquences personnalisées.

PythonPostgreSQL
Source ↗

dbwarden-pgsql-rbac

RBAC Postgres

Rôles, grants, privilèges par défaut et politiques de sécurité au niveau des lignes.

PythonPostgreSQL
Source ↗

dbwarden-pgsql-extensions

Extensions Postgres

Extensions, event triggers, fonctions, triggers et paramètres de stockage.

PythonPostgreSQL
Source ↗

dbwarden-plugin-template

Modèle de plugin

Échafaudage pour construire et tester de nouveaux plugins DBWarden.

Python
Source ↗

dbwarden-seeds

Données de seed

Gestion de seeds par code et fichiers avec apply et rollback.

Python
Source ↗

dbwarden-sandbox

Tests sandbox

Fournisseurs Testcontainers pour rejouer les migrations en sécurité.

PythonDocker
Source ↗
12

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