Troubleshooting¶
Solutions to common configuration issues.
"No configuration found"¶
Symptom¶
Causes & Solutions¶
Cause 1: No dbwarden.py file
Solution: Create dbwarden.py:
Cause 2: Wrong directory
DBWarden looks in current directory and parents.
Solution: Navigate to project root:
Cause 3: No database_config() calls
Solution: Add configuration:
# dbwarden.py
from dbwarden import database_config
primary = database_config(
database_name="primary",
default=True,
database_type="sqlite",
database_url_sync="sqlite:///./app.db",
)
Cause 4: Import error in config file
Solution: Fix imports or use lazy loading:
# Don't import models in config file
primary = database_config(
database_name="primary",
model_paths=["app.models"], # Use model_paths instead
...
)
"Exactly one default=True required"¶
Symptom¶
Causes & Solutions¶
Cause 1: No default database
# Wrong
analytics = database_config(
analytics = database_config(database_name="analytics", default=False, ...)
Solution: Set one database as default:
# Correct
analytics = database_config(
analytics = database_config(database_name="analytics", default=False, ...)
Cause 2: Multiple defaults
# Wrong
analytics = database_config(
analytics = database_config(database_name="analytics", default=True, ...)
Solution: Only one default:
# Correct
analytics = database_config(
analytics = database_config(database_name="analytics", ...) # default=False implied
"Duplicate database_name"¶
Symptom¶
Cause¶
Same database_name used twice:
Solution¶
Use unique names:
analytics = database_config(
analytics = database_config(database_name="analytics", ...) # Different name
"No SQLAlchemy models found"¶
Symptom¶
Causes & Solutions¶
Cause 1: Wrong model_paths
Solution: Use correct Python path:
Cause 2: Models not imported
# app/models/__init__.py
# Wrong - models not imported
from sqlalchemy.orm import DeclarativeBase
class Base(DeclarativeBase):
pass
Solution: Import models:
# app/models/__init__.py
# Correct
from sqlalchemy.orm import DeclarativeBase
from app.models.user import User
from app.models.order import Order
class Base(DeclarativeBase):
pass
Cause 3: Missing model_paths
Solution: Add model_paths:
Cause 4: Circular imports
# app/models/user.py
from app.models.order import Order # Circular
# app/models/order.py
from app.models.user import User # Circular
Solution: Use TYPE_CHECKING:
"model_paths is required"¶
Symptom¶
Cause¶
Multiple databases without model_paths:
# Wrong
analytics = database_config(
analytics = database_config(database_name="analytics", ...) # No model_paths
Solution¶
Add model_paths to all databases:
# Correct
primary = database_config(
database_name="primary",
model_paths=["app.models.primary"],
...
)
analytics = database_config(
database_name="analytics",
model_paths=["app.models.analytics"],
...
)
"model_paths overlap detected"¶
Symptom¶
Cause¶
Same model paths for different databases:
# Wrong
primary = database_config(
database_name="primary",
model_paths=["app.models"],
...
)
analytics = database_config(
database_name="analytics",
model_paths=["app.models"], # Same path
...
)
Solutions¶
Solution 1: Use separate paths
# Correct
primary = database_config(
database_name="primary",
model_paths=["app.models.primary"],
...
)
analytics = database_config(
database_name="analytics",
model_paths=["app.models.analytics"],
...
)
Solution 2: Allow overlap (if intentional)
# Correct for read replicas
primary = database_config(
database_name="primary",
model_paths=["app.models"],
overlap_models=True,
...
)
replica = database_config(
database_name="replica",
model_paths=["app.models"],
overlap_models=True,
...
)
"model_tables overlap detected"¶
Symptom¶
ConfigurationError: model_tables overlap detected: table 'users' in 'primary' is also in 'analytics'
Cause¶
Two databases have model_tables lists that share table names:
# Wrong
primary = database_config(
database_name="primary",
model_paths=["app.models"],
model_tables=["users", "posts"],
...
)
analytics = database_config(
database_name="analytics",
model_paths=["other_models"],
model_tables=["users"], # 'users' already owned by primary
...
)
Solutions¶
Solution 1: Remove duplicate table name
# Correct
analytics = database_config(
database_name="analytics",
model_paths=["other_models"],
model_tables=["analytics_events"], # No overlap with primary
...
)
Solution 2: Allow overlap (if intentional)
# Correct for shared tables
analytics = database_config(
database_name="analytics",
model_paths=["other_models"],
model_tables=["users", "analytics_events"],
overlap_models=True, # Allow overlap
...
)
"dev_database_url is required"¶
Symptom¶
Cause¶
Set dev_database_type without dev_database_url:
# Wrong
primary = database_config(
database_name="primary",
dev_database_type="sqlite",
# Missing dev_database_url
...
)
Solution¶
Add both dev parameters:
# Correct
primary = database_config(
database_name="primary",
dev_database_type="sqlite",
dev_database_url="sqlite:///./dev.db", # Add this
...
)
Connection Errors¶
"could not connect to server"¶
Cause: Database server not running or unreachable.
Solutions:
- Check database is running:
- Check connection URL:
- Test connection:
"authentication failed"¶
Cause: Wrong credentials.
Solutions:
- Check credentials:
- Verify environment variable:
- URL encode special characters:
from urllib.parse import quote_plus
password = "p@ss:word"
encoded = quote_plus(password) # "p%40ss%3Aword"
"database does not exist"¶
Cause: Database not created.
Solution: Create database:
Import Errors¶
"ModuleNotFoundError"¶
Cause: Python can't find module.
Solutions:
- Check PYTHONPATH:
- Install package:
- Verify import:
Performance Issues¶
Slow configuration loading¶
Cause: Large codebase scan.
Solution: Specify model_paths:
# Slow - scans everything
primary = database_config(
# Fast - targeted scan
primary = database_config(
database_name="primary",
model_paths=["app.models"],
...
)
Slow imports¶
Cause: Heavy imports in config file.
Solution: Avoid imports in dbwarden.py:
# Slow
from app.models import Base
from app.services import setup
# Fast
from dbwarden import database_config
db = database_config(
Debugging Tips¶
Enable verbose output¶
Check configuration¶
# Show all configuration
$ dbwarden settings show
# Show specific database
$ dbwarden settings show --database primary
Test imports¶
python -c "import dbwarden; print('OK')"
python -c "from dbwarden import database_config; print('OK')"
Verify database connection¶
What's Next?¶
- Configuration API Reference - Complete parameter docs
- Quick Start - Start fresh with correct setup