73 lines
2.4 KiB
Python
73 lines
2.4 KiB
Python
|
|
#!/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())
|