VWED_server/scripts/fix_instance_ids.py
2025-04-30 16:57:46 +08:00

83 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
任务实例ID修复脚本
为所有现有的任务实例记录生成并设置instance_id
用法:
python scripts/fix_instance_ids.py
"""
import os
import sys
import logging
import uuid
from sqlalchemy import text
# 添加项目根目录到系统路径
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
# 导入项目模块
from data.session import get_db
from data.models.task_instance import TaskInstance
# 设置日志
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
handlers=[
logging.StreamHandler(sys.stdout), # 输出到控制台
logging.FileHandler("fix_instance_ids.log") # 输出到文件
]
)
logger = logging.getLogger("fix_instance_ids")
def fix_instance_ids():
"""为所有现有的任务实例记录生成并设置instance_id"""
try:
# 获取数据库会话
db = next(get_db())
# 查询所有没有instance_id的任务实例记录
instances = db.query(TaskInstance).filter(
(TaskInstance.instance_id == None) |
(TaskInstance.instance_id == '')
).all()
logger.info(f"发现 {len(instances)} 条没有instance_id的任务实例记录")
# 为每条记录生成并设置instance_id
for instance in instances:
instance_id = str(uuid.uuid4())
instance.instance_id = instance_id
logger.info(f"为任务实例 ID={instance.id} 设置instance_id={instance_id}")
# 提交更改
db.commit()
logger.info("所有任务实例记录的instance_id已更新")
return True
except Exception as e:
logger.error(f"修复任务实例ID失败: {str(e)}")
if 'db' in locals():
db.rollback()
return False
def main():
"""主函数"""
logger.info("开始修复任务实例ID...")
# 修复任务实例ID
success = fix_instance_ids()
if success:
logger.info("任务实例ID修复成功")
else:
logger.error("任务实例ID修复失败")
# 根据修复结果设置退出码
sys.exit(0 if success else 1)
if __name__ == "__main__":
main()