Files
ai_wht_B/清空用户微信绑定.py
“shengyudong” 5a384b694e 2026-1-6
2026-01-06 14:18:39 +08:00

302 lines
8.6 KiB
Python
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
清空用户微信绑定脚本
用于将ai_users表中指定用户的wechat_openid字段清空
"""
import sys
from database_config import db_manager
def clear_wechat_binding(user_identifier):
"""
清空用户的微信绑定
Args:
user_identifier: 用户标识可以是用户ID、用户名或手机号
Returns:
bool: 操作是否成功
"""
conn = None
cursor = None
try:
conn = db_manager.get_connection()
cursor = conn.cursor()
# 首先查询用户信息
query_sql = """
SELECT id, username, real_name, phone, wechat_openid
FROM ai_users
WHERE id = %s OR username = %s OR phone = %s
"""
cursor.execute(query_sql, (user_identifier, user_identifier, user_identifier))
user = cursor.fetchone()
if not user:
print(f"❌ 未找到用户: {user_identifier}")
return False
# 从字典中获取值
user_id = user['id']
username = user['username']
real_name = user['real_name']
phone = user['phone']
wechat_openid = user['wechat_openid']
# 显示用户信息
print("\n" + "="*60)
print("📋 找到用户信息:")
print("="*60)
print(f" 用户ID: {user_id}")
print(f" 用户名: {username}")
print(f" 真实姓名: {real_name or '未设置'}")
print(f" 手机号: {phone or '未设置'}")
print(f" 微信OpenID: {wechat_openid or '未绑定'}")
print("="*60)
# 如果已经没有绑定,直接返回
if not wechat_openid:
print("\n✅ 该用户未绑定微信,无需清空")
return True
# 确认操作
confirm = input(f"\n⚠️ 确认要清空用户 [{username}] 的微信绑定吗?(yes/no): ")
if confirm.lower() not in ['yes', 'y', '']:
print("\n❌ 操作已取消")
return False
# 清空微信绑定
update_sql = """
UPDATE ai_users
SET wechat_openid = NULL,
updated_at = NOW()
WHERE id = %s
"""
cursor.execute(update_sql, (user_id,))
conn.commit()
print("\n" + "="*60)
print("✅ 微信绑定已成功清空!")
print("="*60)
print(f" 用户ID: {user_id}")
print(f" 用户名: {username}")
print(f" 操作: wechat_openid 已设置为 NULL")
print("="*60)
return True
except Exception as e:
if conn:
conn.rollback()
print(f"\n❌ 操作失败: {e}")
import traceback
traceback.print_exc()
return False
finally:
if cursor:
cursor.close()
if conn:
conn.close()
def clear_wechat_binding_batch(user_identifiers):
"""
批量清空多个用户的微信绑定
Args:
user_identifiers: 用户标识列表
Returns:
tuple: (成功数量, 失败数量)
"""
success_count = 0
fail_count = 0
print("\n" + ""*60)
print(f"🔄 开始批量清空微信绑定 - 共 {len(user_identifiers)} 个用户")
print(""*60)
for identifier in user_identifiers:
print(f"\n处理用户: {identifier}")
if clear_wechat_binding_silent(identifier):
success_count += 1
else:
fail_count += 1
print("\n" + ""*60)
print("📊 批量操作完成")
print(""*60)
print(f" ✅ 成功: {success_count}")
print(f" ❌ 失败: {fail_count}")
print(""*60)
return success_count, fail_count
def clear_wechat_binding_silent(user_identifier):
"""
静默模式清空用户的微信绑定(无需确认)
Args:
user_identifier: 用户标识
Returns:
bool: 操作是否成功
"""
conn = None
cursor = None
try:
conn = db_manager.get_connection()
cursor = conn.cursor()
# 查询用户
query_sql = """
SELECT id, username, wechat_openid
FROM ai_users
WHERE id = %s OR username = %s OR phone = %s
"""
cursor.execute(query_sql, (user_identifier, user_identifier, user_identifier))
user = cursor.fetchone()
if not user:
print(f" ❌ 未找到用户")
return False
# 从字典中获取值
user_id = user['id']
username = user['username']
wechat_openid = user['wechat_openid']
if not wechat_openid:
print(f" 用户 [{username}] 未绑定微信")
return True
# 清空微信绑定
update_sql = """
UPDATE ai_users
SET wechat_openid = NULL,
updated_at = NOW()
WHERE id = %s
"""
cursor.execute(update_sql, (user_id,))
conn.commit()
print(f" ✅ 用户 [{username}] 微信绑定已清空")
return True
except Exception as e:
if conn:
conn.rollback()
print(f" ❌ 操作失败: {e}")
return False
finally:
if cursor:
cursor.close()
if conn:
conn.close()
def list_users_with_wechat():
"""
列出所有已绑定微信的用户
"""
conn = None
cursor = None
try:
conn = db_manager.get_connection()
cursor = conn.cursor()
query_sql = """
SELECT id, username, real_name, phone, enterprise_name, wechat_openid
FROM ai_users
WHERE wechat_openid IS NOT NULL AND wechat_openid != ''
ORDER BY id
"""
cursor.execute(query_sql)
users = cursor.fetchall()
if not users:
print("\n📋 没有已绑定微信的用户")
return
print("\n" + "="*80)
print(f"📋 已绑定微信的用户列表 - 共 {len(users)}")
print("="*80)
print(f"{'ID':<6} {'用户名':<15} {'真实姓名':<12} {'手机号':<15} {'企业':<20} OpenID")
print("-"*80)
for user in users:
user_id = user['id']
username = user['username']
real_name = user['real_name']
phone = user['phone']
enterprise_name = user['enterprise_name']
openid = user['wechat_openid']
openid_display = openid[:20] + '...' if openid and len(openid) > 20 else (openid or '')
print(f"{user_id:<6} {username:<15} {real_name or '未设置':<12} {phone or '未设置':<15} {(enterprise_name[:18] if enterprise_name else ''):<20} {openid_display}")
print("="*80)
except Exception as e:
print(f"\n❌ 查询失败: {e}")
finally:
if cursor:
cursor.close()
if conn:
conn.close()
def main():
"""主函数"""
if len(sys.argv) < 2:
print("\n" + "="*60)
print("📖 使用说明:")
print("="*60)
print("1. 清空单个用户的微信绑定:")
print(" python 清空用户微信绑定.py <用户ID|用户名|手机号>")
print("\n2. 批量清空多个用户的微信绑定:")
print(" python 清空用户微信绑定.py <用户1> <用户2> <用户3> ...")
print("\n3. 列出所有已绑定微信的用户:")
print(" python 清空用户微信绑定.py --list")
print("="*60)
print("\n示例:")
print(" python 清空用户微信绑定.py 1")
print(" python 清空用户微信绑定.py user001")
print(" python 清空用户微信绑定.py 13800000001")
print(" python 清空用户微信绑定.py 1 2 3")
print(" python 清空用户微信绑定.py --list")
print("="*60)
return
# 列出已绑定用户
if sys.argv[1] == '--list':
list_users_with_wechat()
return
# 单个用户
if len(sys.argv) == 2:
clear_wechat_binding(sys.argv[1])
# 批量用户
else:
clear_wechat_binding_batch(sys.argv[1:])
if __name__ == "__main__":
try:
main()
except KeyboardInterrupt:
print("\n\n❌ 操作被用户中断")
sys.exit(1)
except Exception as e:
print(f"\n❌ 程序异常: {e}")
import traceback
traceback.print_exc()
sys.exit(1)