【问题标题】:How to solve SQLdecode error when you migrate models in django?在django中迁移模型时如何解决SQLdecode错误?
【发布时间】:2019-08-07 05:03:31
【问题描述】:

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

我已经删除了数据库并清除了 django_migration 表中的所有迁移,并删除了创建的迁移文件夹中的迁移文件。仍然得到同样的错误。

请帮我解决这个问题。提前致谢

错误:

    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)

【问题讨论】:

  • 实际的 TypeError: documents must be a non-empty list 来自 pymongo 驱动程序,意思是它所说的,因为它在预期输入时得到一个“空列表”。你真的先运行python manage.py makemigrations 吗?因为错误似乎表明“无事可做”。你说你“删除”了,但 AFIAK 你仍然需要先运行makemigrations
  • 我先是 python manage.py makemigrations 然后运行 ​​python manage.py migrate ,仍然没有运气

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


【解决方案1】:

创建 django 项目后,通过键入卸载 sqlparse

pip3 uninstall sqlparse

然后通过键入安装 sqlparse version=0.2.4

pip3 install sqlparse==0.2.4

然后通过键入迁移 mongodb 数据库

python3 manage.py migrate

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

【讨论】:

    【解决方案2】:

    我已经用pip install --upgrade djongo 更新了djongo,并且我已经完成了python manage.py migrate --fake-initial 的迁移,它已经被修复了。

    【讨论】:

    • 感谢它的工作! ,djongo 上的问题,而不是 sqlprase
    【解决方案3】:

    我已经解决了这个问题。问题可能是 sqlparse 的版本 - sqlparse 0.2.4 运行良好,但 sqlparse 0.3.0 不行。使用以下命令:

    pip install sqlparse==0.2.4 --user
    

    【讨论】:

    • 做了这个并且工作了。但是所看到的——如果我理解得很好的话——是安装最新版本的 sqlpars。我认为这是因为输出Collecting sqlparse==0.2.4 Using cached https://files.pythonhosted.org/packages/65/85/20bdd72f4537cf2c4d5d005368d502b2f464ede22982e724a82c86268eda/sqlparse-0.2.4-py2.py3-none-any.whl Installing collected packages: sqlparse Successfully installed sqlparse-0.3.1
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

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

      下载它 github sqlprase

      pip install filename.zip
      

      【讨论】:

        【解决方案6】:

        我已经通过 sqlparse==0.2.4djongo==1.3.3django==2.1.7 解决了这个问题

        【讨论】:

          【解决方案7】:

          请尝试在终端中使用此命令安装 sqlparse 包。

           pip install sqlparse==0.2.4 
          

          【讨论】:

            【解决方案8】:

            我和你有同样的问题,我试过用sqlite3作为数据库,数据是这样的:

            所以数据不为空!!

            我尝试将 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")'
            

            但还是失败了。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2023-03-16
              • 2017-08-31
              • 2019-06-26
              • 2020-08-24
              • 1970-01-01
              • 1970-01-01
              • 2022-06-17
              相关资源
              最近更新 更多