在Django中迁移模型时,如何解决SQLdecode错误?

时间:2019-03-16 06:30:17

标签: python django mongodb django-models django-migrations

我是django的新手,我创建了一个项目和应用程序,我想将我的项目连接到mongodb。输入python manage.py migrate命令时,出现以下错误。

我删除了数据库,并清除了django_migration表中的所有迁移,并删除了创建的migrations文件夹中的迁移文件。仍然出现相同的错误。

请帮助我。预先感谢

错误:

    raise TypeError("documents must be a non-empty list")
TypeError: documents must be a non-empty list

上述异常是以下异常的直接原因:

djongo.sql2mongo.SQLDecodeError: FAILED SQL: INSERT INTO "django_migrations" ("app", "name", "applied") VALUES (%(0)s, %(1)s, %(2)s)
    Version: 1.2.31

Settings.py

DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'DB_name',
        'HOST':'localhost',
        # 'PORT': 27017,
        # 'USER':'',
        # 'PASSWORD':''
    },

models.py

from django.db import models

# Create your models here.
class dummy(models.Model):

    name= models.CharField(max_length=100, blank=True, null= True)

7 个答案:

答案 0 :(得分:2)

我已经用 return ( <label>Username <TextInput style={{ height: 40, borderColor: 'gray', borderWidth: 1 }} onChangeText={text => onChangeText(text)} value={value} /> </label> ); 更新了 djongo 并且我已经完成了迁移 pip install --upgrade djongo 并且它已经得到修复。

答案 1 :(得分:0)

我对您有同样的问题,我尝试使用sqlite3作为数据库,并且数据就像这样:

enter image description here

所以数据不为空!

然后,我尝试按照以下方式更改sql命令(sql2mongo \ query.py中的第760行):

statement = statement[0]
    sm_type = statement.get_type()
    if sm_type=='INSERT':
        self._sql = 'INSERT INTO "django_migrations" ("app", "name", "applied") VALUES ("test", "windy", "2019-03-15 12:00")'

但仍然失败。

答案 2 :(得分:0)

我已经解决了这个问题,问题可能出在sqlparse的版本上-sqlparse 0.2.4很好用,但是sqlparse 0.3.0不好。

pip install sqlparse == 0.2.4 --user

对我有用,祝你好运!

答案 3 :(得分:0)

只需安装sqlprase即可解决此问题。

下载 github sqlprase

pip install filename.zip !!

答案 4 :(得分:0)

创建Django项目后,通过键入

卸载 sqlparse
pip3 uninstall sqlparse

然后通过键入安装sqlparse版本= 0.2.4

pip3 install sqlparse==0.2.4

然后通过键入

迁移mongodb数据库
python3 manage.py migrate

如果您使用的是 python2 ,则使用( pip )代替( pip3 )和( python )而不是命令中的( python3 )。

答案 5 :(得分:0)

第一次迁移项目时使用python manage.py migrate --fake-initial

在setting.py中添加 INSTALLED_APPS=[ 'APP_NAME.apps.APP_NAMEConfig', ..., ..., ]

答案 6 :(得分:0)

我已经通过sqlparse==0.2.4djongo==1.3.3django==2.1.7的方式解决了它