1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 |
- # 数据库备份核心模块:backup_utils.py
- import os
- import shutil
- from datetime import datetime
- from django.conf import settings
- import sqlite3
- from pathlib import Path
- import logging
- logger = logging.getLogger(__name__)
- def backup_database():
- """执行数据库备份,返回备份路径"""
- try:
- # 源数据库路径(根据您的项目配置调整)
- source_db = Path(settings.BASE_DIR) / 'db.sqlite3'
-
- if not source_db.exists():
- raise FileNotFoundError(f"数据库文件不存在: {source_db}")
-
- # 生成备份目录路径
- now = datetime.now()
- year_month = now.strftime("%Y%m") # 202507
- day_time = now.strftime("%m%d_%H_%M") # 0728_14_45
- backup_dir = Path(f"E:/code/backup/{year_month}/{day_time}")
-
- # 创建备份目录
- backup_dir.mkdir(parents=True, exist_ok=True)
-
- # 目标备份路径
- backup_path = backup_dir / f"db.sqlite3"
-
- # 使用SQLite在线备份API确保备份完整性
- con = sqlite3.connect(source_db)
- bck = sqlite3.connect(backup_path)
- with bck:
- con.backup(bck, pages=1)
- bck.close()
- con.close()
-
- logger.info(f"数据库备份成功: {backup_path}")
- return str(backup_path)
-
- except Exception as e:
- logger.error(f"数据库备份失败: {str(e)}")
- raise
|