#!/usr/bin/env python3 """Repair nickname fields for the imported phone segment. This fixes users whose nickname was overwritten back to the phone number by setting nickname = real_name for the target account range. """ from __future__ import annotations import os import sys import pymysql DB_HOST = os.getenv("DB_HOST", "127.0.0.1") DB_PORT = int(os.getenv("DB_PORT", "3306")) DB_USER = os.getenv("DB_USER", "aivirtual") DB_PASSWORD = os.getenv("DB_PASSWORD", "AiVirtual2024") DB_NAME = os.getenv("DB_NAME", "ai_virtual_news") ACCOUNT_START = os.getenv("ACCOUNT_START", "13721560041") ACCOUNT_END = os.getenv("ACCOUNT_END", "13721560199") def main() -> int: conn = pymysql.connect( host=DB_HOST, port=DB_PORT, user=DB_USER, password=DB_PASSWORD, database=DB_NAME, charset="utf8mb4", autocommit=False, ) try: with conn.cursor() as cur: cur.execute( """ SELECT id, account, nickname, real_name FROM virtual_users WHERE account BETWEEN %s AND %s ORDER BY account """, (ACCOUNT_START, ACCOUNT_END), ) rows = cur.fetchall() if not rows: print("No matching users found.") return 1 cur.execute( """ UPDATE virtual_users SET nickname = real_name WHERE account BETWEEN %s AND %s AND real_name IS NOT NULL AND real_name <> '' AND nickname <> real_name """, (ACCOUNT_START, ACCOUNT_END), ) updated = cur.rowcount conn.commit() print(f"Checked {len(rows)} users, repaired {updated} nicknames.") return 0 finally: conn.close() if __name__ == "__main__": raise SystemExit(main())