【问题标题】:python: CommandError: You appear not to have the 'mysql' program installed or on your pathpython:CommandError:您似乎没有安装“mysql”程序或在您的路径上
【发布时间】:2025-11-23 13:20:07
【问题描述】:

我正在为 Django 应用程序开发 Mysql 数据库,所以我创建了一个名为 maison 的数据库,将 settings.py 配置如下:

DATABASES = {
'default': {
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'maison',
    'USER': 'root',
    'PASSWORD': '1234',
    'HOST': '127.0.0.1',
    'PORT': '5432',

}
}

为了验证我的数据库是否连接到我的应用程序,我运行命令python manage.py dbshell 但它会抛出该错误:

CommandError:您似乎没有安装“mysql”程序或在您的路径上。

虽然我已经安装了所有要求:

  • Python:3.6
  • Django:1.11
  • MySQL:5.7
  • mysql客户端

你有什么想法来解决这个错误吗??

【问题讨论】:

  • 你在本地安装了MYSQL吗?
  • 不,我是全局安装的。

标签: python mysql django


【解决方案1】:

按照代码,Django 简单地运行控制台应用mysql。尝试在没有 Django 的情况下从控制台调用它。也许它没有安装,不在 PATH 环境变量中或尚未在 PATH 环境变量中(尝试 rehash 命令或控制台重新登录,如果你有 rehash 命令)。

class DatabaseClient(BaseDatabaseClient):
executable_name = 'mysql'

@classmethod
def settings_to_cmd_args(cls, settings_dict):
    args = [cls.executable_name]
    db = settings_dict['OPTIONS'].get('db', settings_dict['NAME'])
    user = settings_dict['OPTIONS'].get('user', settings_dict['USER'])
    passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD'])
    host = settings_dict['OPTIONS'].get('host', settings_dict['HOST'])
    port = settings_dict['OPTIONS'].get('port', settings_dict['PORT'])
    cert = settings_dict['OPTIONS'].get('ssl', {}).get('ca')
    defaults_file = settings_dict['OPTIONS'].get('read_default_file')
    # Seems to be no good way to set sql_mode with CLI.

    if defaults_file:
        args += ["--defaults-file=%s" % defaults_file]
    if user:
        args += ["--user=%s" % user]
    if passwd:
        args += ["--password=%s" % passwd]
    if host:
        if '/' in host:
            args += ["--socket=%s" % host]
        else:
            args += ["--host=%s" % host]
    if port:
        args += ["--port=%s" % port]
    if cert:
        args += ["--ssl-ca=%s" % cert]
    if db:
        args += [db]
    return args

def runshell(self):
    args = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)
    subprocess.check_call(args)

【讨论】:

  • 我实际使用的是Windows系统,
  • 子进程模块没关系。
【解决方案2】:

尝试运行python manage.py shell,它对我有用,我认为它也对你有用!

【讨论】:

  • 他要dbshel​​l,但不要shell
【解决方案3】:

你的机器可能没有添加mysql-client路径。

对于linux,请执行以下命令行:

echo 'export PATH=/usr/local/opt/mysql-client/bin:$PATH' >> ~/.bash_profile

如果是windows系统请在环境中添加mysql-client路径。

【讨论】: