插件窝 干货文章 PyCharm 中 Django 迁移出错:如何解决"django.db.utils.OperationalError: SSL connection error"?

PyCharm 中 Django 迁移出错:如何解决"django.db.utils.OperationalError: SSL connection error"?

配置 连接 SSL 数据库 1001    来源:    2025-04-01

解决 Django 迁移中的 SSL 连接错误

错误分析

django.db.utils.OperationalError: SSL connection error 错误通常发生在 Django 尝试与数据库建立 SSL 连接时失败。这可能是由于以下原因之一:

  1. 数据库服务器配置了强制 SSL 连接,但客户端配置不正确
  2. 证书验证失败
  3. 数据库连接字符串中的 SSL 配置有误

解决方案

方法 1:禁用 SSL 连接(仅限开发环境)

如果是在开发环境且不需要 SSL 连接,可以在数据库配置中禁用 SSL:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',  # 或 mysql 等
        'NAME': 'your_db',
        'USER': 'your_user',
        'PASSWORD': 'your_password',
        'HOST': 'localhost',
        'PORT': '5432',
        'OPTIONS': {
            'sslmode': 'disable',  # 禁用 SSL
        },
    }
}

方法 2:正确配置 SSL 连接

如果需要 SSL 连接,确保正确配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'your_db',
        'USER': 'your_user',
        'PASSWORD': 'your_password',
        'HOST': 'your_host',
        'PORT': '5432',
        'OPTIONS': {
            'sslmode': 'require',  # 或 'verify-ca', 'verify-full'
            'sslrootcert': '/path/to/ca-certificate.crt',  # 如果需要
            'sslcert': '/path/to/client-certificate.crt',  # 如果需要
            'sslkey': '/path/to/client-key.key',  # 如果需要
        },
    }
}

方法 3:检查数据库服务器 SSL 配置

  1. 对于 PostgreSQL: 检查 pg_hba.confpostgresql.conf 中的 SSL 设置
  2. 对于 MySQL: 检查 my.cnf 中的 SSL 相关配置

方法 4:验证证书路径

确保所有证书路径正确且 Django 进程有权限访问这些文件。

方法 5:更新数据库适配器

确保你使用的是最新版本的数据库适配器:

pip install --upgrade psycopg2-binary  # PostgreSQL
# 或
pip install --upgrade mysqlclient     # MySQL

PyCharm 特定建议

  1. 确保 PyCharm 使用的 Python 解释器与你手动运行迁移时使用的相同
  2. 检查 PyCharm 运行配置中的环境变量是否与你的设置匹配
  3. 尝试在 PyCharm 的终端中手动运行迁移命令,查看是否有更详细的错误信息

验证解决方案

在应用任何更改后,尝试运行:

python manage.py check
python manage.py migrate

如果问题仍然存在,请提供更详细的错误信息以便进一步诊断。