ETest-Vue-FastAPI/organize_categories.py

73 lines
2.4 KiB
Python
Raw Normal View History

2026-03-30 10:38:36 +08:00
#!/usr/bin/env python3
"""整理测试类别 - 将现有项目归类到大类下"""
import asyncio
from sqlalchemy.ext.asyncio import create_async_engine
from sqlalchemy import text
DB_CONFIG = {
'host': '123.57.81.127',
'port': 3306,
'user': 'cpy_admin',
'password': 'Tgzz2025+',
'database': 'ruoyi-fastapi'
}
DATABASE_URL = (
f"mysql+asyncmy://{DB_CONFIG['user']}:{DB_CONFIG['password']}@"
f"{DB_CONFIG['host']}:{DB_CONFIG['port']}/{DB_CONFIG['database']}"
)
async def organize_categories():
engine = create_async_engine(DATABASE_URL, echo=False)
async with engine.connect() as conn:
print("=" * 80)
print("Organize Test Categories")
print("=" * 80)
# 1. 查看现有大类
print("\n[1] Existing Test Categories (Level 1):")
result = await conn.execute(text("""
SELECT id, name, category_code FROM test_category WHERE level = 1 ORDER BY id
"""))
rows = result.fetchall()
if rows:
for row in rows:
print(f" ID:{row[0]} | {row[1]} | Code:{row[2]}")
else:
print(" No categories found")
# 2. 查看未归类的项目
print("\n[2] Unassigned Test Items (Level 2 without parent):")
result = await conn.execute(text("""
SELECT id, name, memo FROM test_category
WHERE level = 2 AND (parent_id IS NULL OR parent_id = 0)
ORDER BY name
LIMIT 20
"""))
rows = result.fetchall()
for row in rows:
print(f" ID:{row[0]} | {row[1]} | Memo:{row[2]}")
# 3. 统计信息
print("\n[3] Statistics:")
result = await conn.execute(text("""
SELECT
COUNT(CASE WHEN level = 1 THEN 1 END) as category_count,
COUNT(CASE WHEN level = 2 AND parent_id IS NOT NULL THEN 1 END) as assigned_items,
COUNT(CASE WHEN level = 2 AND (parent_id IS NULL OR parent_id = 0) THEN 1 END) as unassigned_items
FROM test_category
"""))
row = result.fetchone()
print(f" Categories: {row[0]}")
print(f" Assigned Items: {row[1]}")
print(f" Unassigned Items: {row[2]}")
print("\n" + "=" * 80)
await engine.dispose()
if __name__ == '__main__':
asyncio.run(organize_categories())