| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #!/usr/bin/env python3
- """
- 数据库迁移脚本:为 tool_table 添加 implemented_tool_ids 字段
- 该字段用于存储工具库中实际接入的工具 ID 列表,建立工具描述与实际实现之间的映射关系。
- """
- import os
- import sys
- import psycopg2
- from psycopg2.extras import RealDictCursor
- from dotenv import load_dotenv
- # 加载环境变量
- _script_dir = os.path.dirname(os.path.abspath(__file__))
- _project_root = os.path.normpath(os.path.join(_script_dir, '..', '..'))
- load_dotenv(os.path.join(_project_root, '.env'))
- def get_connection():
- """建立数据库连接"""
- host = os.getenv('KNOWHUB_DB')
- port = int(os.getenv('KNOWHUB_PORT', 5432))
- user = os.getenv('KNOWHUB_USER')
- password = os.getenv('KNOWHUB_PASSWORD')
- dbname = os.getenv('KNOWHUB_DB_NAME')
- print(f"连接到 {host}:{port}/{dbname} as {user} ...")
- conn = psycopg2.connect(
- host=host,
- port=port,
- user=user,
- password=password,
- database=dbname,
- connect_timeout=10
- )
- conn.autocommit = True
- print("连接成功。")
- return conn
- def main():
- print("=" * 60)
- print("开始迁移:添加 tool_table.implemented_tool_ids 字段")
- print("=" * 60)
- conn = get_connection()
- cursor = conn.cursor(cursor_factory=RealDictCursor)
- # 检查字段是否已存在
- cursor.execute("""
- SELECT column_name
- FROM information_schema.columns
- WHERE table_name = 'tool_table' AND column_name = 'implemented_tool_ids'
- """)
- if cursor.fetchone():
- print("\n字段 'implemented_tool_ids' 已存在,跳过迁移。")
- else:
- print("\n添加字段 'implemented_tool_ids' ...")
- cursor.execute("""
- ALTER TABLE tool_table
- ADD COLUMN implemented_tool_ids JSONB DEFAULT '[]'
- """)
- print("✓ 字段添加成功")
- # 验证结果
- print("\n" + "=" * 60)
- print("验证结果:")
- print("=" * 60)
- cursor.execute("""
- SELECT column_name, data_type, column_default
- FROM information_schema.columns
- WHERE table_name = 'tool_table'
- ORDER BY ordinal_position
- """)
- print("\ntool_table 当前字段:")
- for row in cursor.fetchall():
- print(f" - {row['column_name']}: {row['data_type']} (默认: {row['column_default']})")
- cursor.execute("SELECT COUNT(*) as count FROM tool_table")
- count = cursor.fetchone()['count']
- print(f"\n总记录数: {count}")
- cursor.close()
- conn.close()
- print("\n迁移完成!")
- if __name__ == '__main__':
- main()
|