使用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模型绕过默认查询逻辑:- 在你的应用
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' - 在
settings.py中指定自定义模型:SITE_ID = 1 SITE_MODEL = 'your_app_name.CustomSite' - 重新执行迁移命令。
- 在你的应用
检查版本兼容性
确保Django版本与Djongo版本匹配,比如Djongo 1.3.x仅支持Django 2.x,而新版Djongo支持Django 3.x/4.x,避免版本不兼容导致的解析问题。
内容的提问来源于stack exchange,提问作者Aashi Patel
相关产品推荐
相关产品推荐

