feat: 初始化考培练系统项目
- 从服务器拉取完整代码 - 按框架规范整理项目结构 - 配置 Drone CI 测试环境部署 - 包含后端(FastAPI)、前端(Vue3)、管理端 技术栈: Vue3 + TypeScript + FastAPI + MySQL
This commit is contained in:
78
backend/scripts/cleanup_users.py
Normal file
78
backend/scripts/cleanup_users.py
Normal file
@@ -0,0 +1,78 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
用户清理脚本
|
||||
删除除admin以外的所有用户,为员工同步做准备
|
||||
"""
|
||||
|
||||
import asyncio
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
# 添加项目根目录到Python路径
|
||||
sys.path.insert(0, str(Path(__file__).parent.parent))
|
||||
|
||||
from sqlalchemy import select, delete
|
||||
from app.core.database import AsyncSessionLocal
|
||||
from app.models.user import User
|
||||
from app.core.logger import get_logger
|
||||
|
||||
logger = get_logger(__name__)
|
||||
|
||||
|
||||
async def cleanup_users():
|
||||
"""
|
||||
删除除admin以外的所有用户
|
||||
保留username='admin'的管理员账号
|
||||
"""
|
||||
async with AsyncSessionLocal() as db:
|
||||
try:
|
||||
# 查询要删除的用户
|
||||
stmt = select(User).where(User.username != 'admin', User.is_deleted == False)
|
||||
result = await db.execute(stmt)
|
||||
users_to_delete = result.scalars().all()
|
||||
|
||||
if not users_to_delete:
|
||||
logger.info("没有需要删除的用户")
|
||||
return
|
||||
|
||||
logger.info(f"准备删除 {len(users_to_delete)} 个用户")
|
||||
for user in users_to_delete:
|
||||
logger.info(f" - ID: {user.id}, 用户名: {user.username}, 姓名: {user.full_name}")
|
||||
|
||||
# 确认删除
|
||||
print("\n⚠️ 警告: 将删除以上用户(保留admin)")
|
||||
confirm = input("确认删除?(yes/no): ")
|
||||
|
||||
if confirm.lower() != 'yes':
|
||||
logger.info("取消删除操作")
|
||||
return
|
||||
|
||||
# 执行软删除
|
||||
for user in users_to_delete:
|
||||
user.is_deleted = True
|
||||
logger.info(f"已软删除用户: {user.username}")
|
||||
|
||||
await db.commit()
|
||||
logger.info(f"✅ 成功删除 {len(users_to_delete)} 个用户")
|
||||
|
||||
# 显示剩余用户
|
||||
stmt = select(User).where(User.is_deleted == False)
|
||||
result = await db.execute(stmt)
|
||||
remaining_users = result.scalars().all()
|
||||
|
||||
logger.info(f"\n剩余用户数量: {len(remaining_users)}")
|
||||
for user in remaining_users:
|
||||
logger.info(f" - ID: {user.id}, 用户名: {user.username}, 角色: {user.role}")
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"清理用户失败: {str(e)}")
|
||||
await db.rollback()
|
||||
raise
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print("=" * 60)
|
||||
print("用户清理脚本")
|
||||
print("=" * 60)
|
||||
asyncio.run(cleanup_users())
|
||||
|
||||
Reference in New Issue
Block a user