_probe_demo_tenant.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. # -*- coding: utf-8 -*-
  2. """Probe existing Demo tenant/user in the shared dev DB before doing租户 A batch."""
  3. from __future__ import annotations
  4. import pymysql
  5. CONN = dict(
  6. host='123.60.180.165', port=3306,
  7. user='aidopremote', password='1234567890aiDOP#',
  8. database='aidopdev', charset='utf8mb4', autocommit=True,
  9. )
  10. def main() -> None:
  11. conn = pymysql.connect(**CONN)
  12. with conn.cursor(pymysql.cursors.DictCursor) as cur:
  13. print("=== SysTenant schema ===")
  14. cur.execute("SHOW COLUMNS FROM SysTenant")
  15. cols = [c['Field'] for c in cur.fetchall()]
  16. print(" columns:", ", ".join(cols))
  17. print("\n=== SysTenant 列表 ===")
  18. cur.execute("SELECT * FROM SysTenant ORDER BY Id")
  19. for row in cur.fetchall():
  20. cid = row.get('Id')
  21. name_candidates = [row.get(k) for k in ('Name', 'TenantName', 'OrgName', 'NickName') if k in row]
  22. nm = next((x for x in name_candidates if x), '-')
  23. st = row.get('Status', '?')
  24. tt = row.get('TenantType', '?')
  25. print(f" {cid!s:>15} | {nm!s:<30} | Status={st} | TenantType={tt}")
  26. print("\n=== 疑似 Demo 账号 (Account/RealName 含 demo/Demo/试用/演示) ===")
  27. cur.execute(
  28. """
  29. SELECT Id, Account, RealName, NickName, TenantId, Status
  30. FROM SysUser
  31. WHERE LOWER(Account) LIKE '%demo%' OR LOWER(NickName) LIKE '%demo%'
  32. OR RealName LIKE '%试用%' OR RealName LIKE '%演示%' OR RealName LIKE '%Demo%'
  33. ORDER BY TenantId, Id
  34. """
  35. )
  36. rows = cur.fetchall()
  37. if not rows:
  38. print(" (无)")
  39. for row in rows:
  40. print(f" Id={row['Id']} | Account={row['Account']} | RealName={row['RealName']} | TenantId={row['TenantId']} | Status={row['Status']}")
  41. print("\n=== AiDOP 核心表 TenantId 分布 ===")
  42. for tbl, col in [
  43. ('ado_smart_ops_kpi_master', 'TenantId'),
  44. ('ado_smart_ops_layout_item', 'TenantId'),
  45. ('ado_smart_ops_home_module', 'TenantId'),
  46. ('ado_s9_kpi_value_l1_day', 'tenant_id'),
  47. ('ado_s9_kpi_value_l2_day', 'tenant_id'),
  48. ]:
  49. try:
  50. cur.execute(f"SELECT {col} AS t, COUNT(*) AS c FROM {tbl} GROUP BY {col} ORDER BY {col}")
  51. dist = cur.fetchall()
  52. info = ", ".join(f"{r['t']}:{r['c']}" for r in dist) or "(空表)"
  53. print(f" {tbl:<32} → {info}")
  54. except pymysql.err.ProgrammingError as ex:
  55. print(f" {tbl:<32} → 表不存在? {ex.args[-1] if ex.args else ex}")
  56. print("\n=== SysUser 总数 & 默认租户用户数 ===")
  57. cur.execute("SELECT COUNT(*) AS c FROM SysUser")
  58. print(f" SysUser 总数: {cur.fetchone()['c']}")
  59. for t in (1, 1300000000001):
  60. cur.execute("SELECT COUNT(*) AS c FROM SysUser WHERE TenantId=%s", (t,))
  61. print(f" TenantId={t:>15}: {cur.fetchone()['c']} 人")
  62. conn.close()
  63. if __name__ == "__main__":
  64. main()