Developing Locally¶
This guide covers the local development workflow: using a development database, checking diffs safely, reverse-engineering models, and generating offline migrations.
Use Dev Mode¶
Dev mode swaps the configured database target for dev_database_url and dev_database_type.
Configuration example:
from dbwarden import database_config
primary = database_config(
database_name="primary",
default=True,
database_type="postgresql",
database_url_sync="postgresql://user:password@localhost:5432/main",
model_paths=["app.models"],
model_tables=["users", "posts", "comments"],
dev_database_type="sqlite",
dev_database_url="sqlite:///./development.db",
)
Run local commands against the development target:
$ dbwarden --dev make-migrations "test local change" --database primary
Created migration: migrations/primary/primary__0002_test_local_change.sql
$ dbwarden --dev migrate --database primary
Applying migration: primary__0002_test_local_change.sql
Migration applied successfully
SQLite Translation¶
Using SQLite in dev mode is common, but not every type or default translates perfectly from server databases. DBWarden handles this by translating backend-specific types and warning when fidelity is reduced.
If you want those warnings to become hard failures, use:
Check the Planned Changes¶
Use diff when you want to inspect differences without writing files:
Use check when you want a safety classification:
$ dbwarden check --database primary
SAFE add column users.bio
WARN shrink varchar users.email
CRITICAL drop table audit_log
Offline Migrations¶
Offline migrations let you generate SQL without connecting to a live database. The workflow is:
- Export the current model state.
- Change your models.
- Generate a migration with
--offline.
Commands:
$ dbwarden export-models --database primary
$ dbwarden make-migrations "offline schema change" --offline --database primary
This is useful for CI, restricted environments, and workflows where the migration plan should not depend on a live database connection.
For a full walkthrough, see Cookbook: Offline & CI.
Local Validation Loop¶
A practical local loop looks like this:
$ dbwarden --dev diff --database primary
$ dbwarden --dev check --database primary
$ dbwarden --dev make-migrations "local change" --database primary
$ dbwarden --dev migrate --database primary
$ dbwarden --dev status --database primary
This keeps feedback fast while still using the same toolchain you use in production.
Next, continue with Workflows.