Django中dbshell命令能否支持其他数据库命令行客户端
回答
python manage.py dbshell能不能拉起MSSQL、MongoDB等其他数据库的命令行客户端,核心看你用的数据库后端有没有做对应适配,Django核心本身没有内置所有数据库的支持:
- 针对MSSQL(SQL Server):如果用微软维护的
mssql-django作为数据库后端,本地提前装好SQL Server官方命令行工具sqlcmd并加到系统环境变量,数据库配置的ENGINE、连接参数都填对的话,执行dbshell可以正常拉起SQL Server的命令行客户端。其他第三方MSSQL后端只要实现了dbshell逻辑,也能支持。 - 针对MongoDB:Django原生ORM不支持MongoDB,现在主流的MongoDB对接方案(比如Djongo)基本都没做dbshell适配,执行命令的时候没法自动拉起MongoDB的
mongosh客户端,会直接抛未实现的错误。
底层逻辑说明
dbshell本身不会自动识别数据库类型、也不会自动帮你找客户端,它的运行逻辑非常简单:
- 读取settings里配置的
DATABASES对应的ENGINE后端 - 调用该后端预先写好的dbshell逻辑,拿到要执行的客户端命令和拼接好的连接参数
- 在系统里启动对应的客户端程序
也就是说要让dbshell正常拉起非原生支持的数据库客户端,必须同时满足两个条件:
- 你用的数据库后端实现了dbshell相关逻辑,明确指定了要调用的客户端程序、参数拼接规则
- 本地运行环境已经装好了对应数据库的命令行客户端,且路径已经加入系统PATH,能被直接调用
缺任何一个条件,命令都没法正常运行。
内容的提问来源于stack exchange,提问作者Super Kai - Kazuya Ito
相关产品推荐
相关产品推荐

