如何在Matlab中删除Datajoint schema及列举数据库服务器所有schema
Matlab 3.4版本Datajoint指定操作实现方法
1. 删除整个Datajoint schema(对应Python schema.drop(True)功能)
- 方法1:使用Datajoint原生封装方法
首先实例化目标schema对象,再调用drop方法传入强制删除参数:
若你使用的3.4版本% 假设你的schema类名为YourSchema,先实例化 schema_obj = YourSchema(); % 第二个参数传true表示强制删除,忽略依赖项,直接删除整个schema drop(schema_obj, true);drop方法不支持第二个参数,直接调用drop(schema_obj)后会弹出确认提示,手动确认即可完成删除。 - 方法2:直接执行原生SQL语句(无schema对象时使用)
基于Datajoint连接对象直接执行删库语句,操作更直接:
警告:该操作不可逆,执行前请务必确认schema名称正确,避免误删数据% conn为你已初始化的Datajoint连接对象 schema_name = '你要删除的schema名称'; query(conn, sprintf('DROP DATABASE IF EXISTS `%s`;', schema_name));
2. 列出服务器上所有现存schema(对应Python dj.list_schemas()功能)
- 方法1:使用Datajoint内置方法
Matlab版Datajoint采用驼峰命名规则,直接调用内置方法即可:
返回值为存储所有schema名称的cell数组。schema_list = dj.listSchemas(); - 方法2:执行原生SQL查询(适配无内置方法的低版本分支)
直接查询系统表获取schema列表,可自行过滤系统库:conn = dj.conn(); % 获取当前激活的Datajoint连接 % 查询非系统库的schema名称 res = query(conn, 'SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ("mysql", "information_schema", "performance_schema", "sys")'); % 转换为cell数组格式,方便后续调用 schema_list = arrayfun(@(x) x.schema_name, res, 'UniformOutput', false);
注意事项
- 执行删除schema操作前,请确保当前连接的数据库用户拥有
DROP权限;查询schema列表需要information_schema的读权限 - 所有删除操作执行前建议提前备份相关数据,避免数据丢失
内容的提问来源于stack exchange,提问作者jbussell
相关产品推荐
相关产品推荐

