59 lines
1.5 KiB
Python
59 lines
1.5 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
多租户迁移脚本
|
|||
|
|
为现有数据表添加 tenant_id 字段,已有数据填充为 'default'
|
|||
|
|
"""
|
|||
|
|
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|||
|
|
|
|||
|
|
from src.core.database import db_manager
|
|||
|
|
from sqlalchemy import text, inspect
|
|||
|
|
|
|||
|
|
TABLES_TO_MIGRATE = [
|
|||
|
|
"work_orders",
|
|||
|
|
"chat_sessions",
|
|||
|
|
"conversations",
|
|||
|
|
"knowledge_entries",
|
|||
|
|
"analytics",
|
|||
|
|
"alerts",
|
|||
|
|
"users",
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
|
|||
|
|
def migrate():
|
|||
|
|
print("=" * 50)
|
|||
|
|
print("多租户迁移: 添加 tenant_id 字段")
|
|||
|
|
print("=" * 50)
|
|||
|
|
|
|||
|
|
with db_manager.get_session() as session:
|
|||
|
|
inspector = inspect(session.bind)
|
|||
|
|
|
|||
|
|
for table in TABLES_TO_MIGRATE:
|
|||
|
|
# 检查表是否存在
|
|||
|
|
if table not in inspector.get_table_names():
|
|||
|
|
print(f" [跳过] 表 {table} 不存在")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 检查字段是否已存在
|
|||
|
|
columns = [col["name"] for col in inspector.get_columns(table)]
|
|||
|
|
if "tenant_id" in columns:
|
|||
|
|
print(f" [已有] 表 {table} 已包含 tenant_id")
|
|||
|
|
continue
|
|||
|
|
|
|||
|
|
# 添加字段
|
|||
|
|
print(f" [迁移] 表 {table} 添加 tenant_id ...")
|
|||
|
|
session.execute(text(
|
|||
|
|
f"ALTER TABLE {table} ADD COLUMN tenant_id VARCHAR(50) DEFAULT 'default' NOT NULL"
|
|||
|
|
))
|
|||
|
|
session.commit()
|
|||
|
|
print(f" [完成] 表 {table} 迁移成功")
|
|||
|
|
|
|||
|
|
print("\n迁移完成!")
|
|||
|
|
|
|||
|
|
|
|||
|
|
if __name__ == "__main__":
|
|||
|
|
migrate()
|