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

使用django_tenants对接MySQL执行租户迁移时遇属性错误求助

django-tenants MySQL迁移报错:AttributeError: 'DatabaseWrapper' object has no attribute 'schema_name'

问题详情

  • 执行django-tenants租户迁移操作时触发错误,错误信息:
if connection.schema_name == public_schema_name:
AttributeError: 'DatabaseWrapper' object has no attribute 'schema_name'
  • 曾尝试配置django_tenants.mysql_backend作为数据库引擎,但问题未解决。
  • 使用PostgreSQL数据库(配置django_tenants.postgresql_backend引擎)时无异常。
  • 报错时的完整配置:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME':'portals',
        'USER':'root',
        'PASSWORD':'root',
        'HOST': '127.0.0.1',
        'PORT': '3306'
    }
}

MIDDLEWARE = [ 
    'django_tenants.middleware.main.TenantMainMiddleware',
]

DATABASE_ROUTERS = ( 
    'django_tenants.routers.TenantSyncRouter', 
)

TENANT_MODEL = "client.Client" 
TENANT_DOMAIN_MODEL = "client.Domain"

解决办法

1. 核心原因

django-tenants的租户隔离逻辑依赖数据库的Schema机制,但MySQL原生不支持PostgreSQL式的Schema概念。默认的django.db.backends.mysql引擎没有schema_name属性,直接导致代码调用报错。

2. 配置适配的MySQL后端

  • 安装专为MySQL适配的django-tenants扩展包(例如django-tenants-mysql,需确认包版本与你的django-tenants、Django版本兼容)。
  • 修改数据库引擎为适配的后端:
DATABASES = {
    'default': {
        'ENGINE': 'django_tenants_mysql.backend',
        'NAME':'portals',
        'USER':'root',
        'PASSWORD':'root',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'OPTIONS': {
            'init_command': "SET sql_mode='STRICT_TRANS_TABLES'",
        },
    }
}

注意:部分旧版django-tenants自带的django_tenants.mysql_backend可能存在兼容性问题,优先使用维护活跃的第三方适配包。

3. 执行正确的迁移命令

MySQL环境下需使用租户专用迁移命令,而非默认的migrate:

python manage.py tenant migrate

4. 检查模型定义

确保你的Client和Domain模型正确继承了django-tenants的基类:

from django_tenants.models import TenantMixin, DomainMixin

class Client(TenantMixin):
    # 自定义模型字段
    pass

class Domain(DomainMixin):
    pass

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 18:47:37