You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在cPanel执行python manage.py migrate时报错:'staticmethod'不可调用

解决Django生产环境migrate报错TypeError: 'staticmethod' object is not callable

问题定位

从报错堆栈和环境信息来看,错误直接源于mysql.connector.django引擎与当前Django版本不兼容:当Django尝试获取数据库连接的display_name属性时,该属性被定义为静态方法(staticmethod),但Django逻辑期望它是可调用的实例方法,因此触发类型错误。

你的场景完全匹配该问题的典型特征:

  • DEBUG模式下用SQLite执行migrate正常
  • makemigrations/collectstatic可正常运行(这两个命令不会触发数据库连接的约束检查逻辑)
  • 生产环境切换到MySQL+mysql.connector.django引擎后出现报错

解决方案

方案1:更换为Django官方推荐的MySQL引擎(优先选择)

mysql.connector.django并非Django官方维护的引擎,兼容性远不如官方推荐的django.db.backends.mysql。操作步骤:

  1. 安装依赖包:
pip install mysqlclient
  1. 修改base.py中的数据库配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': env('PRODUCTION_DATABASE_NAME'),
        'USER': env('PRODUCTION_DATABASE_USERNAME'),
        'PASSWORD': env('PRODUCTION_DATABASE_PASSWORD'),
        'HOST': env('PRODUCTION_DATABASE_HOST'),
        # 可选:添加字符集配置避免编码问题
        'OPTIONS': {
            'charset': 'utf8mb4',
        },
    }
}
  1. 重新执行migrate:
python manage.py migrate

方案2:降级mysql-connector-python到兼容版本

如果必须使用mysql.connector.django,可尝试降级到与当前Django版本兼容的旧版本(比如8.0.28版本,该版本修复了display_name的静态方法问题):

  1. 卸载当前版本:
pip uninstall mysql-connector-python
  1. 安装指定版本:
pip install mysql-connector-python==8.0.28
  1. 重新执行migrate命令

方案3:临时绕过(不推荐,仅应急使用)

修改Django源码中django/utils/functional.py第57行附近的调用逻辑,强制处理静态方法的调用问题,但这种方法会影响后续版本升级,仅建议紧急情况下临时使用。

额外排查点

  • 确认生产环境MySQL服务正常运行,数据库账户具备足够权限(可通过mysql -u 用户名 -p命令测试连接)
  • 检查环境变量是否正确加载(PRODUCTION_DATABASE_NAME等变量是否被正确读取)

内容的提问来源于stack exchange,提问作者squidg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 18:47:08