backup_utils.py 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. # 数据库备份核心模块:backup_utils.py
  2. import os
  3. import shutil
  4. from datetime import datetime
  5. from django.conf import settings
  6. import sqlite3
  7. from pathlib import Path
  8. import logging
  9. logger = logging.getLogger(__name__)
  10. def backup_database():
  11. """执行数据库备份,返回备份路径"""
  12. try:
  13. # 源数据库路径(根据您的项目配置调整)
  14. source_db = Path(settings.BASE_DIR) / 'db.sqlite3'
  15. if not source_db.exists():
  16. raise FileNotFoundError(f"数据库文件不存在: {source_db}")
  17. # 生成备份目录路径
  18. now = datetime.now()
  19. year_month = now.strftime("%Y%m") # 202507
  20. day_time = now.strftime("%m%d_%H_%M") # 0728_14_45
  21. backup_dir = Path(f"E:/code/backup/{year_month}/{day_time}")
  22. # 创建备份目录
  23. backup_dir.mkdir(parents=True, exist_ok=True)
  24. # 目标备份路径
  25. backup_path = backup_dir / f"db.sqlite3"
  26. # 使用SQLite在线备份API确保备份完整性
  27. con = sqlite3.connect(source_db)
  28. bck = sqlite3.connect(backup_path)
  29. with bck:
  30. con.backup(bck, pages=1)
  31. bck.close()
  32. con.close()
  33. logger.info(f"数据库备份成功: {backup_path}")
  34. return str(backup_path)
  35. except Exception as e:
  36. logger.error(f"数据库备份失败: {str(e)}")
  37. raise