test_mariadb_connection.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #!/usr/bin/env python3
  2. """
  3. Script de test de connexion à MariaDB
  4. Usage: python scripts/test_mariadb_connection.py
  5. """
  6. import os
  7. import sys
  8. from pathlib import Path
  9. from dotenv import load_dotenv
  10. # Charger le .env
  11. BASE_DIR = Path(__file__).resolve().parent.parent
  12. load_dotenv(BASE_DIR / '.env')
  13. def test_import():
  14. """Tester l'import de MySQLdb"""
  15. print("🔍 Test 1 : Import du module MySQLdb...")
  16. try:
  17. import MySQLdb
  18. print(" ✅ MySQLdb importé avec succès")
  19. return True
  20. except ImportError as e:
  21. print(f" ❌ Erreur d'import: {e}")
  22. print(" 💡 Installez mysqlclient: pip install mysqlclient")
  23. return False
  24. def test_connection():
  25. """Tester la connexion à MariaDB"""
  26. print("\n🔍 Test 2 : Connexion à MariaDB...")
  27. # Récupérer les paramètres depuis .env
  28. db_host = os.getenv('DB_HOST', 'localhost')
  29. db_port = int(os.getenv('DB_PORT', '3306'))
  30. db_user = os.getenv('DB_USER', 'root')
  31. db_password = os.getenv('DB_PASSWORD', '')
  32. db_name = os.getenv('DB_NAME', 'duhaz_blog')
  33. print(f" Paramètres de connexion:")
  34. print(f" - Hôte: {db_host}")
  35. print(f" - Port: {db_port}")
  36. print(f" - Utilisateur: {db_user}")
  37. print(f" - Base: {db_name}")
  38. print()
  39. try:
  40. import MySQLdb
  41. conn = MySQLdb.connect(
  42. host=db_host,
  43. port=db_port,
  44. user=db_user,
  45. passwd=db_password,
  46. db=db_name
  47. )
  48. print(" ✅ Connexion établie avec succès!")
  49. # Tester une requête
  50. cursor = conn.cursor()
  51. cursor.execute("SELECT VERSION()")
  52. version = cursor.fetchone()
  53. print(f" 📊 Version MariaDB: {version[0]}")
  54. cursor.execute("SELECT DATABASE()")
  55. current_db = cursor.fetchone()
  56. print(f" 📂 Base de données active: {current_db[0]}")
  57. cursor.close()
  58. conn.close()
  59. return True
  60. except Exception as e:
  61. print(f" ❌ Erreur de connexion: {e}")
  62. print()
  63. print(" 💡 Vérifications à faire:")
  64. print(" 1. Le conteneur MariaDB est-il démarré?")
  65. print(" docker ps | grep mariadb")
  66. print(" 2. Le port est-il exposé?")
  67. print(" docker port mariadb")
  68. print(" 3. Pouvez-vous pinguer l'hôte?")
  69. print(f" ping {db_host}")
  70. print(" 4. Le port est-il accessible?")
  71. print(f" telnet {db_host} {db_port}")
  72. return False
  73. def test_django_connection():
  74. """Tester la connexion via Django"""
  75. print("\n🔍 Test 3 : Connexion via Django...")
  76. # Vérifier que DB_ENGINE est bien configuré
  77. db_engine = os.getenv('DB_ENGINE', 'sqlite3')
  78. if db_engine != 'mysql':
  79. print(f" ⚠️ DB_ENGINE={db_engine} (devrait être 'mysql')")
  80. print(" 💡 Modifiez votre .env: DB_ENGINE=mysql")
  81. return False
  82. try:
  83. # Setup Django
  84. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'duhaz_blog.settings')
  85. import django
  86. django.setup()
  87. from django.db import connection
  88. with connection.cursor() as cursor:
  89. cursor.execute("SELECT VERSION()")
  90. version = cursor.fetchone()
  91. print(f" ✅ Django connecté à MariaDB {version[0]}")
  92. return True
  93. except Exception as e:
  94. print(f" ❌ Erreur Django: {e}")
  95. return False
  96. def main():
  97. print("=" * 60)
  98. print("🧪 Test de connexion MariaDB")
  99. print("=" * 60)
  100. print()
  101. # Test 1: Import
  102. if not test_import():
  103. return 1
  104. # Test 2: Connexion directe
  105. if not test_connection():
  106. return 1
  107. # Test 3: Connexion via Django
  108. if not test_django_connection():
  109. return 1
  110. print("\n" + "=" * 60)
  111. print("✅ Tous les tests sont passés!")
  112. print("=" * 60)
  113. print()
  114. print("Vous pouvez maintenant lancer la migration:")
  115. print(" python scripts/migrate_to_mariadb.py")
  116. print()
  117. return 0
  118. if __name__ == '__main__':
  119. sys.exit(main())