\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
| Path : /var/www/html/yedekledb24/DatabaseBackupMasterv8/ |
|
B-Con CMD Config cPanel C-Rdp D-Log Info Jump Mass Ransom Symlink vHost Zone-H |
| Current File : /var/www/html/yedekledb24/DatabaseBackupMasterv8/generate_schema.py |
#!/usr/bin/env python3
"""
Bu script, veritabanı şemasını ve gerekli SQL komutlarını oluşturur.
pg_dump kullanılamadığı durumlar için alternatif bir çözümdür.
"""
import os
import datetime
from dotenv import load_dotenv
from app import app, db
# .env dosyasından ortam değişkenlerini yükleyin
load_dotenv()
# Yedek dosyasının adını tarih-saat ile oluşturun
TIMESTAMP = datetime.datetime.now().strftime('%Y%m%d_%H%M%S')
BACKUP_DIR = 'database_backups'
SCHEMA_FILE = f"{BACKUP_DIR}/schema_{TIMESTAMP}.sql"
def generate_schema():
"""Veritabanı şemasını ve gerekli SQL komutlarını oluşturur"""
# Yedekleme dizinini oluşturun (yoksa)
os.makedirs(BACKUP_DIR, exist_ok=True)
# Flask uygulama bağlamını oluşturun
with app.app_context():
# Tablo listesini ve sütunlarını alın
from sqlalchemy import inspect
inspector = inspect(db.engine)
tables = inspector.get_table_names()
# SQL dosyasını oluşturun
with open(SCHEMA_FILE, 'w') as f:
# Header
f.write("-- Database Backup Sistemi Schema\n")
f.write(f"-- Oluşturulma Tarihi: {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n\n")
# Drop statements
f.write("-- Drop existing tables (if exist)\n")
for table in reversed(tables): # Yabancı anahtar kısıtlamaları için tabloları ters sırada kaldırın
f.write(f"DROP TABLE IF EXISTS {table} CASCADE;\n")
f.write("\n")
# Create statements
for table in tables:
columns = inspector.get_columns(table)
pk_constraint = inspector.get_pk_constraint(table)
pk_columns = pk_constraint.get('constrained_columns', []) if pk_constraint else []
foreign_keys = inspector.get_foreign_keys(table)
f.write(f"-- Table: {table}\n")
f.write(f"CREATE TABLE {table} (\n")
# Column definitions
column_defs = []
for col in columns:
col_name = col['name']
col_type = str(col['type'])
nullable = "NULL" if col['nullable'] else "NOT NULL"
default = f"DEFAULT {col['default']}" if col['default'] else ""
pk = "PRIMARY KEY" if col_name in pk_columns else ""
col_def = f" {col_name} {col_type} {nullable} {default} {pk}".strip()
column_defs.append(col_def)
# Foreign key constraints
for fk in foreign_keys:
fk_name = fk.get('name', '')
referred_table = fk.get('referred_table', '')
constrained_columns = fk.get('constrained_columns', [])
referred_columns = fk.get('referred_columns', [])
if constrained_columns and referred_columns:
fk_def = f" CONSTRAINT {fk_name} FOREIGN KEY ({', '.join(constrained_columns)}) REFERENCES {referred_table} ({', '.join(referred_columns)})"
column_defs.append(fk_def)
f.write(',\n'.join(column_defs))
f.write("\n);\n\n")
# Index statements
indexes = inspector.get_indexes(table)
for idx in indexes:
idx_name = idx.get('name', '')
unique = "UNIQUE" if idx.get('unique', False) else ""
columns = idx.get('column_names', [])
if columns:
f.write(f"CREATE {unique} INDEX {idx_name} ON {table} ({', '.join(columns)});\n")
f.write("\n")
# Ekstra bilgileri ekleyin
f.write("-- DATABASE BACKUP SYSTEM INITIAL SETUP COMPLETE\n")
f.write("-- RUN THE FOLLOWING COMMAND TO RESTORE THIS SCHEMA:\n")
f.write(f"-- python import_database.py {SCHEMA_FILE}\n")
print(f"Veritabanı şeması başarıyla oluşturuldu: {SCHEMA_FILE}")
if __name__ == "__main__":
generate_schema()