check_other_children_visible.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. # -*- coding: utf-8 -*-
  2. import pymysql
  3. M = dict(
  4. host='cq-cdb-8fjmemkb.sql.tencentcdb.com',
  5. port=27220,
  6. user='root',
  7. password='Ylrz_1q2w3e4r5t6y',
  8. database='ylrz_saas',
  9. charset='utf8mb4',
  10. )
  11. c = pymysql.connect(**M)
  12. cur = c.cursor()
  13. cur.execute('SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35300')
  14. print('direct children', cur.fetchone()[0])
  15. cur.execute(
  16. "SELECT visible, COUNT(*) FROM tenant_sys_menu WHERE parent_id=35300 GROUP BY visible"
  17. )
  18. print('direct by visible', cur.fetchall())
  19. cur.execute(
  20. "SELECT menu_id, menu_name, visible, menu_type FROM tenant_sys_menu "
  21. "WHERE parent_id=35300 ORDER BY order_num LIMIT 8"
  22. )
  23. print('sample direct:')
  24. for r in cur.fetchall():
  25. print(' ', r)
  26. # count all descendants visible status
  27. cur.execute('SELECT menu_id, parent_id FROM tenant_sys_menu')
  28. rows = cur.fetchall()
  29. children_map = {}
  30. for mid, pid in rows:
  31. children_map.setdefault(pid, []).append(mid)
  32. menu_vis = {r[0]: r[1] for r in cur.execute('SELECT menu_id, visible FROM tenant_sys_menu') or []}
  33. cur.execute('SELECT menu_id, visible FROM tenant_sys_menu')
  34. menu_vis = dict(cur.fetchall())
  35. def descendants(root):
  36. out = []
  37. stack = list(children_map.get(root, []))
  38. while stack:
  39. mid = stack.pop()
  40. out.append(mid)
  41. stack.extend(children_map.get(mid, []))
  42. return out
  43. desc = descendants(35300)
  44. vis0 = sum(1 for i in desc if menu_vis.get(i) == '0')
  45. vis1 = sum(1 for i in desc if menu_vis.get(i) == '1')
  46. print('total descendants', len(desc), 'visible=0', vis0, 'visible=1', vis1)
  47. cur.close()
  48. c.close()