#!/usr/bin/env python3 """ 快速修复脚本 - 修复数据库字段缺失问题 使用方法: 1. 确保config.py中数据库配置正确 2. 运行: python quick_fix.py """ import os import sys # 添加项目路径 sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) from app import create_app, db from app.models import Admin, AuditLog def fix_database(): """修复数据库结构""" app = create_app() with app.app_context(): print("=" * 60) print("开始修复数据库...") print("=" * 60) try: # 检查admin表结构 print("\n1. 检查admin表字段...") admin_columns = [c.name for c in Admin.__table__.columns] print(f" 当前字段: {', '.join(admin_columns)}") # 检查is_deleted字段 if 'is_deleted' not in admin_columns: print(" ⚠️ 缺少 is_deleted 字段,正在添加...") db.session.execute("ALTER TABLE admin ADD COLUMN is_deleted INT NOT NULL DEFAULT 0") db.session.execute("ALTER TABLE admin ADD COLUMN delete_time DATETIME NULL") db.session.execute("CREATE INDEX ix_admin_is_deleted ON admin(is_deleted)") db.session.commit() print(" ✅ 已添加 is_deleted 和 delete_time 字段") else: print(" ✅ is_deleted 字段已存在") # 检查delete_time字段 if 'delete_time' not in admin_columns: print(" ⚠️ 缺少 delete_time 字段,正在添加...") db.session.execute("ALTER TABLE admin ADD COLUMN delete_time DATETIME NULL") db.session.commit() print(" ✅ 已添加 delete_time 字段") else: print(" ✅ delete_time 字段已存在") # 检查audit_log表 print("\n2. 检查audit_log表...") try: AuditLog.query.count() print(" ✅ audit_log 表存在") except Exception as e: print(f" ⚠️ audit_log 表不存在或有问题: {e}") print(" 正在创建...") db.session.execute(""" CREATE TABLE audit_log ( log_id INT AUTO_INCREMENT PRIMARY KEY, admin_id INT NOT NULL, action VARCHAR(32) NOT NULL, target_type VARCHAR(32) NOT NULL, target_id INT NULL, details TEXT NULL, ip_address VARCHAR(32) NULL, user_agent VARCHAR(256) NULL, create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (admin_id) REFERENCES admin(admin_id) ) """) db.session.execute("CREATE INDEX ix_audit_log_admin_id ON audit_log(admin_id)") db.session.execute("CREATE INDEX ix_audit_log_action ON audit_log(action)") db.session.execute("CREATE INDEX ix_audit_log_create_time ON audit_log(create_time)") db.session.commit() print(" ✅ audit_log 表创建成功") # 验证修复 print("\n3. 验证修复结果...") admin_columns = [c.name for c in Admin.__table__.columns] assert 'is_deleted' in admin_columns, "is_deleted 字段缺失" assert 'delete_time' in admin_columns, "delete_time 字段缺失" print(" ✅ admin 表结构正确") audit_columns = [c.name for c in AuditLog.__table__.columns] print(" ✅ audit_log 表存在") print("\n" + "=" * 60) print("✅ 数据库修复完成!") print("=" * 60) return True except Exception as e: db.session.rollback() print("\n" + "=" * 60) print("❌ 修复失败!") print(f"错误: {str(e)}") print("=" * 60) import traceback traceback.print_exc() return False def main(): """主函数""" print("\n" + "=" * 60) print("数据库快速修复工具") print("=" * 60 + "\n") # 检查config.py if not os.path.exists('config.py'): print("⚠️ 未找到 config.py 文件") print("请确保在项目根目录运行此脚本\n") # 修复数据库 success = fix_database() if success: print("\n✅ 可以启动应用了!") print("运行: python run.py\n") return 0 else: print("\n❌ 修复失败,请检查错误信息\n") return 1 if __name__ == '__main__': sys.exit(main())