Django Management Commands
Django Management Commands
Section titled “Django Management Commands”DBCrust provides seamless integration with Django’s management command system, allowing you to access your Django databases using DBCrust’s advanced features directly through familiar Django workflows. This guide covers all Django-specific commands and integration patterns.
🚀 Quick Start
Section titled “🚀 Quick Start”Basic Django Integration
Section titled “Basic Django Integration”Connect to your Django databases using the same settings Django uses:
# Connect to default databasecd your_django_project/python manage.py dbcrust
# Connect to specific database from DATABASES settingpython manage.py dbcrust --database analyticspython manage.py dbcrust --database userspython manage.py dbcrust --database cacheThat’s it! DBCrust automatically reads your Django database configuration and connects with the same credentials Django uses.
📋 Available Commands
Section titled “📋 Available Commands”Core Database Commands
Section titled “Core Database Commands”python manage.py dbcrust
Section titled “python manage.py dbcrust”Launch DBCrust interactive session using Django database settings.
# Basic usagepython manage.py dbcrust # Default databasepython manage.py dbcrust --database users # Specific database
# With additional optionspython manage.py dbcrust --debug # Enable debug outputpython manage.py dbcrust --no-banner # Skip startup bannerpython manage.py dbcrust --read-only # Read-only connectionOptions:
--database DB: Use specific database from Django settings--debug: Enable debug logging--no-banner: Skip DBCrust startup banner--read-only: Open read-only connection--sql-timeout N: Set query timeout in seconds
python manage.py dbcrust_analyze
Section titled “python manage.py dbcrust_analyze”Analyze Django ORM performance across your application.
# Analyze all models and viewspython manage.py dbcrust_analyze
# Analyze specific apppython manage.py dbcrust_analyze --app myapp
# Analyze specific modelspython manage.py dbcrust_analyze --models User,Order,Product
# Generate detailed reportpython manage.py dbcrust_analyze --report detailed --output report.htmlOptions:
--app APP: Analyze specific Django app--models MODELS: Comma-separated list of models to analyze--views: Include view analysis--report FORMAT: Report format (summary, detailed, json)--output FILE: Save report to file--slow-queries: Focus on slow query detection--n-plus-one: Focus on N+1 query detection
python manage.py dbcrust_migrate_check
Section titled “python manage.py dbcrust_migrate_check”Verify migration performance and detect potential issues.
# Check pending migrationspython manage.py dbcrust_migrate_check
# Analyze migration performance impactpython manage.py dbcrust_migrate_check --analyze-impact
# Check for dangerous operationspython manage.py dbcrust_migrate_check --check-safetyPerformance Analysis Commands
Section titled “Performance Analysis Commands”python manage.py dbcrust_profile_views
Section titled “python manage.py dbcrust_profile_views”Profile Django views for database performance.
# Profile all viewspython manage.py dbcrust_profile_views
# Profile specific viewspython manage.py dbcrust_profile_views --views book_list,author_detail
# Run with test datapython manage.py dbcrust_profile_views --use-fixturesExample output:
📊 Django View Performance Profile==================================
book_list (/books/): ✅ Queries: 3 (good) ⚠️ Duration: 1.2s (slow) 🔴 N+1 detected: author.name accessed 50 times 💡 Fix: Book.objects.select_related('author')
author_detail (/authors/{id}/): ✅ Queries: 2 (good) ✅ Duration: 45ms (fast) 💡 Consider: prefetch_related('books') for related bookspython manage.py dbcrust_model_stats
Section titled “python manage.py dbcrust_model_stats”Generate comprehensive model usage statistics.
# Statistics for all modelspython manage.py dbcrust_model_stats
# Specific modelspython manage.py dbcrust_model_stats --models User,Order
# Include relationship analysispython manage.py dbcrust_model_stats --include-relationsCode Analysis Commands
Section titled “Code Analysis Commands”python manage.py dbcrust_analyze_code
Section titled “python manage.py dbcrust_analyze_code”Static analysis of Python code for ORM performance issues.
# Analyze entire codebasepython manage.py dbcrust_analyze_code
# Analyze specific filespython manage.py dbcrust_analyze_code --files views.py,models.py
# Auto-fix simple issuespython manage.py dbcrust_analyze_code --auto-fixDetects:
- Missing
select_related()calls - Missing
prefetch_related()calls - Queries in loops
- Inefficient filter patterns
- Missing database indexes
python manage.py dbcrust_generate_optimizations
Section titled “python manage.py dbcrust_generate_optimizations”Generate optimization suggestions for Django models and queries.
# Generate optimizations for all modelspython manage.py dbcrust_generate_optimizations
# Focus on specific issuespython manage.py dbcrust_generate_optimizations --focus n-plus-onepython manage.py dbcrust_generate_optimizations --focus indexespython manage.py dbcrust_generate_optimizations --focus queries
# Generate code patchespython manage.py dbcrust_generate_optimizations --generate-patches🔧 Configuration
Section titled “🔧 Configuration”Django Settings Integration
Section titled “Django Settings Integration”DBCrust automatically integrates with your Django database configuration:
# Standard Django database configDATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'myapp_prod', 'USER': 'myapp', 'PASSWORD': os.getenv('DB_PASSWORD'), 'HOST': 'db.company.com', 'PORT': '5432', }, 'analytics': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'analytics', 'USER': 'analyst', 'PASSWORD': os.getenv('ANALYTICS_DB_PASSWORD'), 'HOST': 'analytics.company.com', 'PORT': '5432', }, 'cache': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': BASE_DIR / 'cache.sqlite3', }}
# DBCrust-specific settings (optional)DBCRUST = { # Default database for management commands 'DEFAULT_DATABASE': 'default',
# Analysis settings 'ANALYSIS': { 'ENABLED': True, 'AUTO_ANALYZE_MIGRATIONS': True, 'DETECT_N_PLUS_ONE': True, 'SUGGEST_INDEXES': True, },
# Command-specific settings 'COMMANDS': { 'dbcrust': { 'AUTO_CONNECT': True, 'SHOW_BANNER': True, 'READ_ONLY_DEFAULT': False, }, 'dbcrust_analyze': { 'DEFAULT_FORMAT': 'detailed', 'INCLUDE_STACK_TRACES': True, } }}Environment-Specific Commands
Section titled “Environment-Specific Commands”DBCRUST = { 'COMMANDS': { 'dbcrust': { 'READ_ONLY_DEFAULT': True, # Default to read-only in production 'REQUIRE_CONFIRMATION': True, # Confirm destructive operations } }}
# settings/development.pyDBCRUST = { 'ANALYSIS': { 'AUTO_ANALYZE_MIGRATIONS': True, 'REAL_TIME_ANALYSIS': True, }}🎯 Django-Specific Features
Section titled “🎯 Django-Specific Features”Model Introspection
Section titled “Model Introspection”DBCrust understands Django models and provides enhanced introspection:
-- Inside DBCrust session via `python manage.py dbcrust`
-- List Django models (not just tables)\dt-- Shows: auth_user, auth_group, myapp_book, myapp_author, etc.
-- Describe Django model with relationship info\d auth_user-- Shows fields with Django field types and relationships
-- Django-specific table analysis\d myapp_book-- Shows:-- - Django field types (CharField, ForeignKey, etc.)-- - Relationship information-- - Custom model methods-- - Admin integration statusMigration Analysis
Section titled “Migration Analysis”Analyze Django migrations before applying:
# Check migration safetypython manage.py dbcrust_migrate_check
# Analyze specific migrationpython manage.py dbcrust_migrate_check --migration 0023_add_index
# Performance impact analysispython manage.py dbcrust_migrate_check --analyze-impact --database defaultExample output:
🔍 Django Migration Analysis============================
Pending migrations for 'myapp': 0023_add_index: Adding index to User.email 0024_alter_book_title: Changing Book.title max_length
Analysis Results:
0023_add_index: ✅ Safe operation ⏱️ Estimated time: 2.3s (User table has 50K rows) 🔒 Locking: Minimal (CONCURRENT index creation) 💡 Recommendation: Apply during low traffic
0024_alter_book_title: ⚠️ Requires table rewrite ⏱️ Estimated time: 45s (Book table has 500K rows) 🔒 Locking: Full table lock ⚠️ Recommendation: Apply during maintenance windowORM Query Pattern Detection
Section titled “ORM Query Pattern Detection”Automatically detect common Django ORM anti-patterns:
# This command analyzes your codebasepython manage.py dbcrust_analyze_code --patterns django-ormDetected patterns:
# ❌ N+1 Query Pattern Detected# File: views.py, Line: 45books = Book.objects.all()for book in books: print(book.author.name) # Triggers N+1
# 💡 Suggested fix:books = Book.objects.select_related('author').all()
# ❌ Query in Template Loop Detected# File: templates/books/list.html, Line: 12{% for book in books %} {{ book.reviews.count }} {# Query per book #}{% endfor %}
# 💡 Suggested fix:books = Book.objects.prefetch_related('reviews').all()
# ❌ Missing Database Index Detected# File: models.py, Line: 23class Book(models.Model): isbn = models.CharField(max_length=13) # Frequently filtered, no index
# 💡 Suggested fix:class Book(models.Model): isbn = models.CharField(max_length=13, db_index=True)🔍 Advanced Analysis Features
Section titled “🔍 Advanced Analysis Features”Custom Analysis Rules
Section titled “Custom Analysis Rules”Create Django-specific analysis rules:
from dbcrust.django.analyzers import DjangoAnalyzer
class CustomDjangoAnalyzer(DjangoAnalyzer): """Custom Django ORM analysis rules"""
def analyze_queryset_patterns(self, view_name, querysets): """Analyze Django-specific patterns""" issues = []
for qs in querysets: # Check for missing pagination on list views if 'list' in view_name.lower(): if not hasattr(qs, 'paginator') and qs.count() > 50: issues.append({ 'type': 'missing_pagination', 'severity': 'warning', 'message': f'List view returns {qs.count()} objects without pagination', 'suggestion': 'Use Django Paginator or limit queryset' })
# Check for inefficient datetime filters query_sql = str(qs.query) if 'created_at >=' in query_sql and 'created_at <' not in query_sql: issues.append({ 'type': 'inefficient_datetime_filter', 'severity': 'info', 'message': 'Open-ended datetime filter may be slow', 'suggestion': 'Add upper bound to datetime filters' })
return issues
def analyze_model_usage(self, model_class): """Analyze Django model usage patterns""" issues = []
# Check for missing Meta.indexes if hasattr(model_class._meta, 'get_fields'): for field in model_class._meta.get_fields(): if hasattr(field, 'db_index') and not field.db_index: if field.name in ['email', 'username', 'slug']: issues.append({ 'type': 'missing_common_index', 'model': model_class.__name__, 'field': field.name, 'suggestion': f'Consider adding db_index=True to {field.name}' })
return issuesDBCRUST = { 'CUSTOM_ANALYZERS': [ 'myapp.dbcrust_django_rules.CustomDjangoAnalyzer', ]}Performance Regression Testing
Section titled “Performance Regression Testing”Integrate with Django tests to prevent performance regressions:
from django.test import TestCasefrom django.core.management import call_commandfrom django.test.utils import override_settings
class PerformanceRegressionTest(TestCase): """Prevent Django ORM performance regressions"""
def test_view_performance_baseline(self): """Ensure views don't exceed performance baselines"""
# Run performance analysis result = call_command( 'dbcrust_profile_views', views='book_list,author_detail', verbosity=0, return_result=True )
# Check performance baselines baselines = { 'book_list': {'max_queries': 5, 'max_duration': 1000}, 'author_detail': {'max_queries': 3, 'max_duration': 500} }
for view, baseline in baselines.items(): view_result = result[view]
self.assertLessEqual( view_result['query_count'], baseline['max_queries'], f"{view} exceeded query limit: {view_result['query_count']} > {baseline['max_queries']}" )
self.assertLessEqual( view_result['duration_ms'], baseline['max_duration'], f"{view} exceeded duration limit: {view_result['duration_ms']}ms > {baseline['max_duration']}ms" )
def test_model_efficiency(self): """Test model usage efficiency"""
result = call_command( 'dbcrust_analyze_code', files='views.py,models.py', verbosity=0, return_result=True )
# No critical issues allowed critical_issues = [issue for issue in result if issue['severity'] == 'critical'] self.assertEqual( len(critical_issues), 0, f"Critical ORM issues found: {critical_issues}" )Production Monitoring Integration
Section titled “Production Monitoring Integration”Monitor Django ORM performance in production:
from django.core.management.base import BaseCommandfrom dbcrust.django.monitoring import ProductionMonitor
class Command(BaseCommand): help = 'Monitor Django ORM performance in production'
def add_arguments(self, parser): parser.add_argument('--duration', type=int, default=300, help='Monitor duration in seconds') parser.add_argument('--sample-rate', type=float, default=0.1, help='Sampling rate (0.1 = 10%)')
def handle(self, *args, **options): monitor = ProductionMonitor( sample_rate=options['sample_rate'], alert_thresholds={ 'query_count': 20, 'duration_ms': 5000, 'n_plus_one_count': 3 } )
self.stdout.write(f"Starting production monitoring for {options['duration']} seconds...")
results = monitor.run(duration=options['duration'])
# Report findings if results['alerts']: self.stdout.write("🚨 Performance alerts:") for alert in results['alerts']: self.stdout.write(f" - {alert['message']}")
self.stdout.write(f"✅ Monitoring complete. Sampled {results['requests_monitored']} requests.")🚨 Troubleshooting
Section titled “🚨 Troubleshooting”Common Issues
Section titled “Common Issues”Command not found:
# Ensure DBCrust is in INSTALLED_APPSpython manage.py shell>>> from django.conf import settings>>> 'dbcrust.django' in settings.INSTALLED_APPSTrueDatabase connection issues:
# Test Django database connection firstpython manage.py dbshell
# Check specific databasepython manage.py dbcrust --database analytics --debugPermission issues:
# Check database user permissionspython manage.py dbcrust --read-onlyAnalysis not working:
# Check Django settingsDBCRUST = { 'ANALYSIS': { 'ENABLED': True, # Must be True }}Debug Mode
Section titled “Debug Mode”Enable detailed debugging for Django integration:
# Enable Django debug loggingexport DJANGO_LOG_LEVEL=DEBUG
# Enable DBCrust debug loggingexport DBCRUST_DEBUG=1
# Run command with debuggingpython manage.py dbcrust --debug💡 Best Practices
Section titled “💡 Best Practices”Development Workflow
Section titled “Development Workflow”# Daily development routinepython manage.py dbcrust_analyze --app myapp # Check for issuespython manage.py dbcrust_migrate_check # Verify migrationspython manage.py dbcrust --database default # Interactive analysis
# Before committing codepython manage.py dbcrust_analyze_code --auto-fix # Fix simple issuespython manage.py test test_performance # Run performance testsTeam Workflows
Section titled “Team Workflows”# Code review preparationpython manage.py dbcrust_generate_optimizations --generate-patches
# Performance monitoringpython manage.py dbcrust_production_monitor --duration 3600 # 1 hour
# Regular health checkspython manage.py dbcrust_model_stats --include-relationsCI/CD Integration
Section titled “CI/CD Integration”# In your CI pipelinepython manage.py dbcrust_analyze_code --fail-on-criticalpython manage.py dbcrust_profile_views --baseline performance_baseline.jsonpython manage.py test test_performance📚 See Also
Section titled “📚 See Also”- Django Middleware - Real-time ORM analysis
- CI/CD Integration - Automated performance testing
- Team Workflows - Collaborative optimization
- Django ORM Analyzer - Complete analyzer documentation