\x89PNG\r\n\x1a\n\x00\x00\x00\x0DIHDR\x00\x00\x00\x01\x00 \x00\x00\x01\x08\x06\x00\x00\x00\x1F\x15\xC4\x89\x00\x00\x00 \x0AIDATx\x9Ccb\x00\x00\x00\x06\x00\x03\x1A\x05\x9D\x00\x00 \x00\x00IEND\xAE\x42\x60\x82 csarite.com
KUJUNTI.ID MINISH3LL
Path : /var/www/html/yedekledb24/DatabaseBackupMasterv8/
(S)h3ll Cr3at0r :
F!le Upl0ad :

B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H

Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv8/drop_and_fix_parent_backup_id.py


#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
yedekleDB24 için veritabanındaki backup_log tablosundaki parent_backup_id
ve backup_method sütunlarını düzelten script.
"""

import os
import sys
import logging
import psycopg2
from psycopg2 import sql
from dotenv import load_dotenv

# Logging ayarları
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s')
logger = logging.getLogger(__name__)

def get_database_url():
    """Veritabanı URL'sini çevre değişkeninden alır."""
    load_dotenv()
    db_url = os.environ.get('DATABASE_URL')
    if not db_url:
        logger.error("DATABASE_URL çevre değişkeni bulunamadı.")
        sys.exit(1)
    return db_url

def fix_backup_log_columns():
    """backup_log tablosunu düzeltir - parent_backup_id ve parent_log_id uyumsuzluğunu çözer."""
    db_url = get_database_url()

    try:
        # Veritabanı bağlantısını kur
        conn = psycopg2.connect(db_url)
        cursor = conn.cursor()

        # backup_log tablosunda parent_log_id sütunu var mı kontrol et
        cursor.execute("""
            SELECT column_name 
            FROM information_schema.columns 
            WHERE table_name = 'backup_log' AND column_name = 'parent_log_id'
        """)
        
        has_parent_log_id = cursor.fetchone() is not None
        
        # backup_log tablosunda parent_backup_id sütunu var mı kontrol et
        cursor.execute("""
            SELECT column_name 
            FROM information_schema.columns 
            WHERE table_name = 'backup_log' AND column_name = 'parent_backup_id'
        """)
        
        has_parent_backup_id = cursor.fetchone() is not None
        
        # Her ikisi de var ise, parent_backup_id'deki değerleri parent_log_id'ye aktar ve parent_backup_id'yi sil
        if has_parent_log_id and has_parent_backup_id:
            logger.info("Her iki sütun da mevcut, parent_backup_id'deki değerleri parent_log_id'ye aktarıyorum...")
            
            cursor.execute("""
                UPDATE backup_log 
                SET parent_log_id = parent_backup_id 
                WHERE parent_log_id IS NULL AND parent_backup_id IS NOT NULL
            """)
            
            # parent_backup_id sütununu kaldır
            logger.info("parent_backup_id sütununu kaldırıyorum...")
            cursor.execute("""
                ALTER TABLE backup_log 
                DROP COLUMN parent_backup_id
            """)
            
            logger.info("parent_backup_id sütunu kaldırıldı.")
        
        # Sadece parent_backup_id var ise, parent_log_id olarak yeniden adlandır
        elif has_parent_backup_id and not has_parent_log_id:
            logger.info("parent_backup_id sütununu parent_log_id olarak yeniden adlandırıyorum...")
            cursor.execute("""
                ALTER TABLE backup_log 
                RENAME COLUMN parent_backup_id TO parent_log_id
            """)
            
            logger.info("Sütun adı değiştirildi.")
        
        # Sadece parent_log_id var ise, sorun yok
        elif has_parent_log_id and not has_parent_backup_id:
            logger.info("parent_log_id sütunu zaten var, sorun yok.")
        
        # İkisi de yoksa, parent_log_id sütununu oluştur
        else:
            logger.info("parent_log_id sütununu oluşturuyorum...")
            cursor.execute("""
                ALTER TABLE backup_log 
                ADD COLUMN parent_log_id INTEGER REFERENCES backup_log(id) ON DELETE SET NULL
            """)
            
            logger.info("parent_log_id sütunu oluşturuldu.")
        
        # backup_method sütunu kontrolü
        cursor.execute("""
            SELECT column_name 
            FROM information_schema.columns 
            WHERE table_name = 'backup_log' AND column_name = 'backup_method'
        """)
        
        if cursor.fetchone() is None:
            logger.info("backup_method sütunu ekleniyor...")
            cursor.execute("""
                ALTER TABLE backup_log 
                ADD COLUMN backup_method VARCHAR(16) DEFAULT 'full'
            """)
            
            logger.info("backup_method sütunu eklendi.")
        else:
            logger.info("backup_method sütunu zaten mevcut.")
        
        # Değişiklikleri kaydet
        conn.commit()
        logger.info("Tüm sütunlar başarıyla güncellendi!")

    except Exception as e:
        logger.error(f"Veritabanı şeması güncellenirken hata oluştu: {str(e)}")
        if 'conn' in locals() and conn:
            conn.rollback()
        return False
    finally:
        if 'cursor' in locals() and cursor:
            cursor.close()
        if 'conn' in locals() and conn:
            conn.close()

    return True

def check_models_py():
    """models.py dosyasındaki tanımlamaları kontrol et."""
    try:
        # Ana proje dizinine geçiş yapmak için
        from pathlib import Path
        project_dir = str(Path(__file__).parent.absolute())
        sys.path.append(project_dir)
        
        # models.py'yi içe aktar
        import models
        
        # BackupLog sınıfını kontrol et
        if hasattr(models, 'BackupLog'):
            backup_log_class = models.BackupLog
            
            # Hangi sütun adını kullanıyor?
            has_parent_backup_id = hasattr(backup_log_class, 'parent_backup_id')
            has_parent_log_id = hasattr(backup_log_class, 'parent_log_id')
            
            if has_parent_backup_id and not has_parent_log_id:
                logger.warning("models.py dosyasında parent_backup_id kullanılmış, ancak veritabanında parent_log_id var.")
                logger.warning("models.py dosyasını güncelleyin: parent_backup_id -> parent_log_id")
            elif has_parent_log_id and not has_parent_backup_id:
                logger.info("models.py dosyası doğru: parent_log_id kullanılıyor.")
            elif has_parent_backup_id and has_parent_log_id:
                logger.warning("models.py dosyasında hem parent_backup_id hem de parent_log_id tanımlanmış.")
                logger.warning("Bir tanesi kaldırılmalı. parent_log_id kullanın.")
            else:
                logger.warning("models.py dosyasında parent_backup_id veya parent_log_id tanımlanmamış.")
                
        else:
            logger.warning("models.py dosyasında BackupLog sınıfı bulunamadı.")
        
    except ImportError as e:
        logger.error(f"models.py dosyası içe aktarılırken hata oluştu: {str(e)}")
    except Exception as e:
        logger.error(f"models.py dosyası kontrol edilirken hata oluştu: {str(e)}")

def main():
    """Ana fonksiyon"""
    logger.info("Veritabanı sütunlarını düzeltme scripti başlatılıyor...")
    
    # models.py'yi kontrol et
    check_models_py()
    
    # Sütunları düzelt
    if fix_backup_log_columns():
        logger.info("Veritabanı sütunları başarıyla düzeltildi.")
    else:
        logger.error("Veritabanı sütunları düzeltilemedi!")
        sys.exit(1)

if __name__ == "__main__":
    main()

© KUJUNTI.ID