快速开发平台 fast_security_admin(二):动态Menu与Entity

本文介绍了一个快速开发平台中的动态Menu与Entity功能实现。通过使用MyBatis-Plus简化了菜单与实体类的生成,并提供了菜单树的递归生成方法。此外,还讨论了时间复杂度的问题及可能的优化方案。

快速开发平台 fast_security_admin(二):动态Menu与Entity

做了一点简单的更新,有通用接口确实好一点,但是用mybatis-plus也是很简单,所以到后期就把方法补齐不再用通用接口。

fast_security_admin在gitee地址

需求提出

  • 动态的menu。
  • 因为是后台系统,前端免不了有大量list,表数据可以用v-for渲染但是表头还要自己写,不方便,有大量重复工作!
  • 菜单绑定entity的id,通过entity_id查entity。

解决方案

数据库建menu表和entity表。

menu表:

在这里插入图片描述

entity表:

在这里插入图片描述

具体实现

很简单,利用mybatis-plus生成menu的类、entity的类。

需要的方法有

public interface MenuService extends IService<Menu> {

    /*
    * 获得status不为0的menu列表
    * */
    ServerResponse listMenu();
    /*
    * 根据parentid生成menu的树
    * */
    ServerResponse menuTree();
}

这里简单看一下生成树状结构的方法,用递归。

参考:Java递归生成树

@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements MenuService {

    @Resource
    private MenuMapper menuMapper;

    @Override
    public ServerResponse menuTree() {
        //获得普通menu列表
        List<Menu> menus=menuMapper.listMenu();
        if(menus.size()==0){
            return ServerResponse.error(-1,"可用menu列表为空");
        }
        //生成menuTree
        List<MenuChildrenDTO> menuTree = createMenuTree(0, menus);
        return ServerResponse.succese(menuTree);
    }
    /*
    * 递归生成菜单树
    * 时间复杂度 O(n^2)?
    * */
    private List<MenuChildrenDTO> createMenuTree(int i, List<Menu> menus) {
        List<MenuChildrenDTO> treeMenu = new ArrayList<>();
        for (Menu menu : menus) {
            if (i == menu.getParentId()) {
                MenuChildrenDTO menuChildrenDTO=new MenuChildrenDTO();
                menuChildrenDTO.setMenu(menu);
                 menuChildrenDTO.setMenus(createMenuTree(menu.getId(),menus));
                treeMenu.add(menuChildrenDTO);
            }
        }
        return treeMenu;
    }
}

可以看到需要一个menuDTO

@Data
public class MenuChildrenDTO {
    private Menu menu;
    private List<MenuChildrenDTO> menus;//子节点
}

但是时间复杂度比较高,考虑优化算法,或者把生成树的过程放到前端完成!

时间复杂度好像是O(n^2),唉我太菜。

再看一下entity表以及它的方法和类,这里就用到了通用接口,还是比较方便的。

我们从菜单获取绑定的entity的id,然后通过

@GetMapping("getById/{entity}/{id}")
    public ServerResponse getById(@PathVariable("entity")String entity,@PathVariable("id")Integer id) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
        //entity="entity" id=?
        return fastService.getById(entity,id);
    }

这个通用接口获得表头数据。

列表的填充数据再建实体类以及它的mapper、service就可以了,然后调用@GetMapping(“list/{entity}”)这个通用接口。

其他更新

做成了多模块项目,很简单,这样看着也比较清楚。

推荐一个开源项目:mall非常不错,是一个商城项目,有配套的教程,参考之后不一定要做商城,可以把权限部分方到自己的项目,它的权限部分后来又重写了变成了一个单独项目,推荐,没收钱哈哈。

mall作者的gitee

github太卡大家自己搜就好了。

欢迎大家关注。

127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "POST /login/ HTTP/1.1" 302 189 "http://localhost:8088/login/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "GET / HTTP/1.1" 302 223 "http://localhost:8088/login/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "GET /superset/welcome/ HTTP/1.1" 200 5769 "http://localhost:8088/login/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 2025-10-25 13:42:07,973:WARNING:superset.views.error_handling:Exception Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 651, in _index_for_key rec = self._keymap[key] KeyError: <sqlalchemy.sql.selectable.Exists object at 0x76adaf92b3d0> The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/decorators.py", line 106, in wraps if current_app.appbuilder.sm.has_access( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1652, in has_access return self._has_view_access(g.user, permission_name, view_name) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1561, in _has_view_access return bool(db_role_ids) and self.exist_permission_on_roles( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/sqla/manager.py", line 440, in exist_permission_on_roles return self.appbuilder.get_session.query(q).scalar() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2893, in scalar ret = self.one() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2870, in one return self._iter().one() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2916, in _iter result = self.session.execute( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1720, in execute result = compile_state_cls.orm_setup_cursor_result( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 349, in orm_setup_cursor_result return loading.instances(result, querycontext) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 88, in instances with util.safe_reraise(): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 69, in instances *[ File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 70, in <listcomp> query_entity.row_processor(context, cursor) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 2911, in row_processor getter = result._getter(column) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 951, in _getter return self._metadata._getter(key, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 98, in _getter index = self._index_for_key(key, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 653, in _index_for_key rec = self._key_fallback(key, ke, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 628, in _key_fallback util.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception sqlalchemy.exc.NoSuchColumnError: Could not locate column in row for column 'EXISTS (SELECT 1 FROM ab_permission_view JOIN ab_permission_view_role ON ab_permission_view.id = ab_permission_view_role.permission_view_id JOIN ab_role ON ab_role.id = ab_permission_view_role.role_id JOIN ab_permission ON ab_permission.id = ab_permission_view.permission_id JOIN ab_view_menu ON ab_view_menu.id = ab_permission_view.view_menu_id WHERE ab_view_menu.name = :name_1 AND ab_permission.name = :name_2 AND ab_role.id IN (__[POSTCOMPILE_id_1]))' 2025-10-25 13:42:07,972:WARNING:superset.views.error_handling:Exception Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 666, in _indexes_for_keys return [self._keymap[key][0] for key in keys] File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 666, in <listcomp> return [self._keymap[key][0] for key in keys] KeyError: Column('id', Integer(), table=<ab_role>, primary_key=True, nullable=False, default=Sequence('ab_role_id_seq', metadata=MetaData())) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/decorators.py", line 106, in wraps if current_app.appbuilder.sm.has_access( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1652, in has_access return self._has_view_access(g.user, permission_name, view_name) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1548, in _has_view_access roles = self.get_user_roles(user) File "/home/gapinyc/superset/superset/security/manager.py", line 2429, in get_user_roles return user.roles File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 487, in __get__ return self.impl.get(state, dict_) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 959, in get value = self._fire_loader_callables(state, key, passive) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 995, in _fire_loader_callables return self.callable_(state, passive) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/strategies.py", line 912, in _load_for_state return self._emit_lazyload( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/strategies.py", line 1046, in _emit_lazyload result = session.execute( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1720, in execute result = compile_state_cls.orm_setup_cursor_result( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 349, in orm_setup_cursor_result return loading.instances(result, querycontext) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 88, in instances with util.safe_reraise(): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 69, in instances *[ File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 70, in <listcomp> query_entity.row_processor(context, cursor) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 2631, in row_processor _instance = loading._instance_processor( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 715, in _instance_processor primary_key_getter = result._tuple_getter(pk_cols) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 962, in _tuple_getter return self._metadata._row_as_tuple_getter(keys) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 106, in _row_as_tuple_getter indexes = self._indexes_for_keys(keys) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 669, in _indexes_for_keys CursorResultMetaData._key_fallback(self, ke.args[0], ke) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 628, in _key_fallback util.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception sqlalchemy.exc.NoSuchColumnError: Could not locate column in row for column 'ab_role.id' 2025-10-25 13:42:07,982:ERROR:superset.views.error_handling:Could not locate column in row for column 'EXISTS (SELECT 1 FROM ab_permission_view JOIN ab_permission_view_role ON ab_permission_view.id = ab_permission_view_role.permission_view_id JOIN ab_role ON ab_role.id = ab_permission_view_role.role_id JOIN ab_permission ON ab_permission.id = ab_permission_view.permission_id JOIN ab_view_menu ON ab_view_menu.id = ab_permission_view.view_menu_id WHERE ab_view_menu.name = :name_1 AND ab_permission.name = :name_2 AND ab_role.id IN (__[POSTCOMPILE_id_1]))' Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 651, in _index_for_key rec = self._keymap[key] KeyError: <sqlalchemy.sql.selectable.Exists object at 0x76adaf92b3d0> The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/decorators.py", line 106, in wraps if current_app.appbuilder.sm.has_access( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1652, in has_access return self._has_view_access(g.user, permission_name, view_name) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1561, in _has_view_access return bool(db_role_ids) and self.exist_permission_on_roles( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/sqla/manager.py", line 440, in exist_permission_on_roles return self.appbuilder.get_session.query(q).scalar() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2893, in scalar ret = self.one() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2870, in one return self._iter().one() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/query.py", line 2916, in _iter result = self.session.execute( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1720, in execute result = compile_state_cls.orm_setup_cursor_result( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 349, in orm_setup_cursor_result return loading.instances(result, querycontext) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 88, in instances with util.safe_reraise(): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 69, in instances *[ File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 70, in <listcomp> query_entity.row_processor(context, cursor) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 2911, in row_processor getter = result._getter(column) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 951, in _getter return self._metadata._getter(key, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 98, in _getter index = self._index_for_key(key, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 653, in _index_for_key rec = self._key_fallback(key, ke, raiseerr) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 628, in _key_fallback util.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception sqlalchemy.exc.NoSuchColumnError: Could not locate column in row for column 'EXISTS (SELECT 1 FROM ab_permission_view JOIN ab_permission_view_role ON ab_permission_view.id = ab_permission_view_role.permission_view_id JOIN ab_role ON ab_role.id = ab_permission_view_role.role_id JOIN ab_permission ON ab_permission.id = ab_permission_view.permission_id JOIN ab_view_menu ON ab_view_menu.id = ab_permission_view.view_menu_id WHERE ab_view_menu.name = :name_1 AND ab_permission.name = :name_2 AND ab_role.id IN (__[POSTCOMPILE_id_1]))' 2025-10-25 13:42:07,982:ERROR:superset.views.error_handling:Could not locate column in row for column 'ab_role.id' Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 666, in _indexes_for_keys return [self._keymap[key][0] for key in keys] File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 666, in <listcomp> return [self._keymap[key][0] for key in keys] KeyError: Column('id', Integer(), table=<ab_role>, primary_key=True, nullable=False, default=Sequence('ab_role_id_seq', metadata=MetaData())) The above exception was the direct cause of the following exception: Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1484, in full_dispatch_request rv = self.dispatch_request() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask/app.py", line 1469, in dispatch_request return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/decorators.py", line 106, in wraps if current_app.appbuilder.sm.has_access( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1652, in has_access return self._has_view_access(g.user, permission_name, view_name) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/flask_appbuilder/security/manager.py", line 1548, in _has_view_access roles = self.get_user_roles(user) File "/home/gapinyc/superset/superset/security/manager.py", line 2429, in get_user_roles return user.roles File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 487, in __get__ return self.impl.get(state, dict_) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 959, in get value = self._fire_loader_callables(state, key, passive) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/attributes.py", line 995, in _fire_loader_callables return self.callable_(state, passive) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/strategies.py", line 912, in _load_for_state return self._emit_lazyload( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/strategies.py", line 1046, in _emit_lazyload result = session.execute( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/session.py", line 1720, in execute result = compile_state_cls.orm_setup_cursor_result( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 349, in orm_setup_cursor_result return loading.instances(result, querycontext) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 88, in instances with util.safe_reraise(): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/langhelpers.py", line 70, in __exit__ compat.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 69, in instances *[ File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 70, in <listcomp> query_entity.row_processor(context, cursor) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/context.py", line 2631, in row_processor _instance = loading._instance_processor( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/orm/loading.py", line 715, in _instance_processor primary_key_getter = result._tuple_getter(pk_cols) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 962, in _tuple_getter return self._metadata._row_as_tuple_getter(keys) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/result.py", line 106, in _row_as_tuple_getter indexes = self._indexes_for_keys(keys) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 669, in _indexes_for_keys CursorResultMetaData._key_fallback(self, ke.args[0], ke) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/cursor.py", line 628, in _key_fallback util.raise_( File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/util/compat.py", line 211, in raise_ raise exception sqlalchemy.exc.NoSuchColumnError: Could not locate column in row for column 'ab_role.id' 127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "GET /api/v1/database/?q=(filters:!((col:database_name,opr:neq,value:examples))) HTTP/1.1" 500 701 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "GET /api/v1/database/?q=(filters:!((col:allow_file_upload,opr:upload_is_enabled,value:!t))) HTTP/1.1" 200 615 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 2025-10-25 13:42:07,998:ERROR:sqlalchemy.pool.impl.QueuePool:Exception during reset or similar Traceback (most recent call last): File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 763, in _finalize_fairy fairy._reset(pool, transaction_was_reset) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/pool/base.py", line 1038, in _reset pool._dialect.do_rollback(self) File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/sqlalchemy/engine/default.py", line 683, in do_rollback dbapi_connection.rollback() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/pymysql/connections.py", line 505, in rollback self._read_ok_packet() File "/home/gapinyc/superset/venv/lib/python3.10/site-packages/pymysql/connections.py", line 467, in _read_ok_packet raise err.OperationalError( pymysql.err.OperationalError: (2014, 'Command Out of Sync') 127.0.0.1 - - [25/Oct/2025:13:42:07 +0800] "GET /api/v1/log/recent_activity/?q=(distinct:!f,page_size:24) HTTP/1.1" 500 253 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "GET /api/v1/dashboard/?q=(filters:!((col:owners,opr:rel_m_m,value:%271%27)),order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:5) HTTP/1.1" 200 547 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "GET /api/v1/saved_query/?q=(filters:!((col:created_by,opr:rel_o_m,value:%271%27)),order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:5) HTTP/1.1" 200 492 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "GET /api/v1/chart/?q=(filters:!((col:owners,opr:rel_m_m,value:%271%27)),order_column:changed_on_delta_humanized,order_direction:desc,page:0,page_size:5) HTTP/1.1" 200 797 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "GET /api/v1/dashboard/_info?q=(keys:!(permissions)) HTTP/1.1" 200 147 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "GET /api/v1/chart/_info?q=(keys:!(permissions)) HTTP/1.1" 200 74 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0" 127.0.0.1 - - [25/Oct/2025:13:42:08 +0800] "POST /superset/log/?explode=events HTTP/1.1" 200 9 "http://localhost:8088/superset/welcome/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0"
最新发布
10-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值