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

使用django-allauth迁移时出现Djongo/MongoDB错误

解决django-all-auth结合Djongo(MongoDB)迁移时的SQLDecodeError错误

错误原因

这个SQLDecodeError是由于Djongo 1.3.6版本对Django ORM生成的特定SQL语法兼容不足导致的——当django-all-auth依赖django_site表进行初始化查询时,Djongo无法解析SELECT %(0)s AS "a" FROM "django_site" LIMIT 1这种占位符格式的SQL语句。

解决方案

  • 升级Djongo版本
    旧版Djongo的SQL解析器存在较多bug,直接升级到最新稳定版:

    pip install --upgrade djongo
    

    新版本对Django的SQL语法支持更完善,大概率能解决该错误。

  • 手动初始化django_site数据
    如果升级后仍报错,可先在MongoDB中手动插入一条site记录,避免空表查询触发错误:
    在MongoDB Shell中执行:

    db.django_site.insertOne({_id: 1, domain: 'localhost:8000', name: 'localhost'})
    

    插入后再执行迁移命令即可。

  • 自定义Site模型(进阶方案)
    若上述方法无效,可通过自定义Site模型绕过默认查询逻辑:

    1. 在你的应用models.py中定义自定义Site模型:
      from django.contrib.sites.models import AbstractSite
      from django.db import models
      
      class CustomSite(AbstractSite):
          domain = models.CharField(max_length=100, unique=True)
          name = models.CharField(max_length=100)
      
          class Meta:
              db_table = 'django_site'
      
    2. 在settings.py中指定自定义模型:
      SITE_ID = 1
      SITE_MODEL = 'your_app_name.CustomSite'
      
    3. 重新执行迁移命令。
  • 检查版本兼容性
    确保Django版本与Djongo版本匹配,比如Djongo 1.3.x仅支持Django 2.x,而新版Djongo支持Django 3.x/4.x,避免版本不兼容导致的解析问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 04:27:46