| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- # -*- coding: utf-8 -*-
- import pymysql
- M = dict(
- host='cq-cdb-8fjmemkb.sql.tencentcdb.com',
- port=27220,
- user='root',
- password='Ylrz_1q2w3e4r5t6y',
- database='ylrz_saas',
- charset='utf8mb4',
- )
- c = pymysql.connect(**M)
- cur = c.cursor()
- cur.execute('SELECT COUNT(*) FROM tenant_sys_menu WHERE parent_id=35300')
- print('direct children', cur.fetchone()[0])
- cur.execute(
- "SELECT visible, COUNT(*) FROM tenant_sys_menu WHERE parent_id=35300 GROUP BY visible"
- )
- print('direct by visible', cur.fetchall())
- cur.execute(
- "SELECT menu_id, menu_name, visible, menu_type FROM tenant_sys_menu "
- "WHERE parent_id=35300 ORDER BY order_num LIMIT 8"
- )
- print('sample direct:')
- for r in cur.fetchall():
- print(' ', r)
- # count all descendants visible status
- cur.execute('SELECT menu_id, parent_id FROM tenant_sys_menu')
- rows = cur.fetchall()
- children_map = {}
- for mid, pid in rows:
- children_map.setdefault(pid, []).append(mid)
- menu_vis = {r[0]: r[1] for r in cur.execute('SELECT menu_id, visible FROM tenant_sys_menu') or []}
- cur.execute('SELECT menu_id, visible FROM tenant_sys_menu')
- menu_vis = dict(cur.fetchall())
- def descendants(root):
- out = []
- stack = list(children_map.get(root, []))
- while stack:
- mid = stack.pop()
- out.append(mid)
- stack.extend(children_map.get(mid, []))
- return out
- desc = descendants(35300)
- vis0 = sum(1 for i in desc if menu_vis.get(i) == '0')
- vis1 = sum(1 for i in desc if menu_vis.get(i) == '1')
- print('total descendants', len(desc), 'visible=0', vis0, 'visible=1', vis1)
- cur.close()
- c.close()
|