#!/usr/bin/env python3 """ Script de migration de SQLite vers MariaDB Usage: python scripts/migrate_to_mariadb.py """ import os import sys import django from pathlib import Path # Ajouter le répertoire parent au path BASE_DIR = Path(__file__).resolve().parent.parent sys.path.insert(0, str(BASE_DIR)) # Setup Django os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings') django.setup() from django.core.management import call_command from django.conf import settings import subprocess def export_sqlite_data(): """Exporter les données de SQLite""" print("📤 Export des données depuis SQLite...") # Créer un dossier pour les dumps dump_dir = BASE_DIR / 'backup' dump_dir.mkdir(exist_ok=True) dump_file = dump_dir / 'sqlite_data.json' # Exporter toutes les données call_command('dumpdata', '--natural-foreign', '--natural-primary', '--exclude=contenttypes', '--exclude=auth.permission', '--indent=2', '--output', str(dump_file)) print(f"✅ Données exportées vers {dump_file}") return dump_file def import_to_mariadb(dump_file): """Importer les données dans MariaDB""" print("\n📥 Import des données dans MariaDB...") # S'assurer que nous utilisons bien MariaDB if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.mysql': print("❌ Erreur: La configuration n'utilise pas MariaDB!") print(f" Moteur actuel: {settings.DATABASES['default']['ENGINE']}") print(" Vérifiez votre fichier .env (DB_ENGINE=mysql)") return False # Créer les tables print("🔧 Création des tables...") call_command('migrate', '--run-syncdb') # Importer les données print("📊 Import des données...") call_command('loaddata', str(dump_file)) print("✅ Données importées avec succès!") return True def verify_migration(): """Vérifier la migration""" print("\n🔍 Vérification de la migration...") from django.contrib.auth.models import User from blog.models import Article user_count = User.objects.count() article_count = Article.objects.count() print(f" 👥 Utilisateurs: {user_count}") print(f" 📝 Articles: {article_count}") return True def main(): print("=" * 60) print("🚀 Migration SQLite → MariaDB") print("=" * 60) # Vérifier que nous sommes bien en SQLite avant l'export if settings.DATABASES['default']['ENGINE'] != 'django.db.backends.sqlite3': print("⚠️ Attention: Vous n'êtes pas en mode SQLite!") print(f" Moteur actuel: {settings.DATABASES['default']['ENGINE']}") response = input(" Voulez-vous continuer quand même? (o/N): ") if response.lower() != 'o': print("❌ Migration annulée") return try: # Étape 1: Export SQLite dump_file = export_sqlite_data() print("\n" + "=" * 60) print("⚠️ IMPORTANT: Maintenant, modifiez votre fichier .env") print("=" * 60) print("Changez DB_ENGINE de 'sqlite3' à 'mysql'") print("Vérifiez que les paramètres DB_NAME, DB_USER, etc. sont corrects") print() input("Appuyez sur Entrée quand c'est fait...") # Recharger Django avec la nouvelle config from importlib import reload import duhaz_blog.settings reload(duhaz_blog.settings) # Étape 2: Import MariaDB if import_to_mariadb(dump_file): # Étape 3: Vérification verify_migration() print("\n" + "=" * 60) print("✅ Migration terminée avec succès!") print("=" * 60) print("\n📋 Prochaines étapes:") print(" 1. Testez votre application") print(" 2. Vérifiez que toutes les données sont présentes") print(" 3. Une fois confirmé, vous pouvez supprimer db.sqlite3") print(f" 4. Gardez le backup: {dump_file}") else: print("\n❌ La migration a échoué") except Exception as e: print(f"\n❌ Erreur lors de la migration: {e}") import traceback traceback.print_exc() return 1 return 0 if __name__ == '__main__': sys.exit(main())