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