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

连接Heroku ClearDB MySQL数据库时出现位置参数错误

解决Django迁移时DatabaseWrapper.display_name() takes 0 positional arguments but 1 was given错误

问题根源

你遇到的错误本质是**mysql-connector-python 8.0.30及以后版本的兼容性bug**——虽然你配置的是mysql.connector.django,但这个后端实际上是mysql-connector-python包的一部分,所以Reddit的建议其实是关联的,只是你没意识到两者的从属关系。另外,你的requirements里同时安装了mysqlclient、PyMySQL、mysql-connector-python三个MySQL驱动,这会导致Django加载驱动时出现冲突,加重问题。

修复步骤

  1. 降级mysql-connector-python到兼容版本
    修改你的requirements.txt,把mysql-connector-python==8.0.33替换为:

    mysql-connector-python==8.0.29
    

    8.0.30+版本修改了display_name()方法的定义,去掉了必要的self参数,导致Django调用时传参不匹配。

  2. 清理冗余的MySQL驱动
    从requirements.txt中删除以下无用/冲突的包:

    • mysql==0.0.3(无实际作用的空包)
    • mysqlclient==2.1.1
    • PyMySQL==1.0.3
      同时保留多个MySQL驱动会让Django无法确定使用哪个后端,引发不可预知的错误。
  3. 重新部署并测试

    • 本地验证:创建虚拟环境,安装修改后的依赖,运行python manage.py migrate确认错误消失。
    • 提交修改到Git仓库,重新push到Heroku。
    • 在Heroku上执行迁移:
      heroku run python manage.py migrate
      

备选方案

如果降级后仍有问题,可以切换到更稳定的mysqlclient驱动:

  • 修改settings.py中的数据库引擎:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': os.environ.get('DB_NAME'),
            'USER': os.environ.get('DB_USER'),
            'PASSWORD': os.environ.get('DB_PASS'),
            'HOST': os.environ.get('DB_HOST'),
            'PORT': '3306',
        }
    }
    
  • 确保requirements.txt中只保留mysqlclient==2.1.1,删除其他MySQL驱动包。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:30:32