【问题标题】:How do i Fix django.db.utils.DatabaseError我如何修复 django.db.utils.DatabaseError
【发布时间】:2021-01-26 02:59:24
【问题描述】:

如何修复 Django 数据库错误。我正在将 MongoDB 与 Djongo 一起使用。

直到最近我决定添加 NewApp 时,一切都运行良好。每当我尝试迁移时,它都会以 django.db.utils.DatabaseError 迎接我。

我尝试手动重置数据库以及从终端重置数据库,但没有成功。

我认为它超级简单,但是对于 Django 和 MongoDB 来说,我是新手,似乎无法弄清楚如何解决它,任何帮助将不胜感激。

这是错误的样子。

Not implemented alter command for SQL ALTER TABLE "articles_article" ADD COLUMN "author_id" int NOT NULL
  Applying articles.0002_article_author...Traceback (most recent call last):
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/cursor.py", line 51, in execute
    self.result = Query(
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 783, in __init__
    self._query = self.parse()
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 875, in parse
    raise e
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 856, in parse
    return handler(self, statement)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 888, in _alter
    query = AlterQuery(self.db, self.connection_properties, sm, self._params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 425, in __init__
    super().__init__(*args)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 84, in __init__
    super().__init__(*args)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 62, in __init__
    self.parse()
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 435, in parse
    self._add(statement)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/sql2mongo/query.py", line 598, in _add
    raise SQLDecodeError(err_key=tok.value,
djongo.exceptions.SQLDecodeError: 

    Keyword: int
    Sub SQL: ALTER TABLE "articles_article" ADD COLUMN "author_id" int NOT NULL
    FAILED SQL: ('ALTER TABLE "articles_article" ADD COLUMN "author_id" int NOT NULL',)
    Params: ([],)
    Version: 1.3.3

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/cursor.py", line 59, in execute
    raise db_exe from e
djongo.database.DatabaseError

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "manage.py", line 21, in <module>
    main()
  File "manage.py", line 17, in main
    execute_from_command_line(sys.argv)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
    utility.execute()
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
    self.fetch_command(subcommand).run_from_argv(self.argv)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
    self.execute(*args, **cmd_options)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
    output = self.handle(*args, **options)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
    res = handle_func(*args, **kwargs)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 231, in handle
    post_migrate_state = executor.migrate(
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
    state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
    state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/migrations/executor.py", line 245, in apply_migration
    state = migration.apply(state, schema_editor)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/migrations/migration.py", line 124, in apply
    operation.database_forwards(self.app_label, schema_editor, old_state, project_state)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/migrations/operations/fields.py", line 110, in database_forwards
    schema_editor.add_field(
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 480, in add_field
    self.execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 142, in execute
    cursor.execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 100, in execute
    return super().execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 68, in execute
    return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
    return executor(sql, params, many, context)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
    raise dj_exc_value.with_traceback(traceback) from exc_value
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
    return self.cursor.execute(sql, params)
  File "/Users/username/opt/anaconda3/envs/restApi/lib/python3.8/site-packages/djongo/cursor.py", line 59, in execute
    raise db_exe from e
django.db.utils.DatabaseError

感谢您的宝贵时间。

【问题讨论】:

  • 您好,我也有同样的问题。你修好了吗?
  • 我做了一个假迁移来完成这项工作,但不认为这是一个正确的解决方案。
  • 哦,我也是,我做了一个假迁移。我认为它是正确的,但是......

标签: django database mongodb djongo


【解决方案1】:

我也遇到了同样的错误,如果其他提到的方法都不起作用,那么可能是你的 sqlparse 版本错误。我的是 0.4.1,这不适用于某些地区。您必须拥有 0.2.4 版本。

pip install sqlparse==0.2.4

【讨论】:

    【解决方案2】:

    这也发生在我身上。我通过将 Django 从 2.1.7 升级到 3.1.7、删除迁移文件并再次运行 makemigrations 解决了这个问题。然后,当我迁移时,没有更多的错误。显然 Django 2.1.7 生成的迁移文件与 3.1.7 不同。

    编辑: 如果您在使用“过滤器”进行查询时遇到同样的错误,请尝试将您的 Django 版本降级到 3.0.5。

    【讨论】:

    • 扎凡你知道做线程化cmets系统吗?
    • 对不起@orynnnnn 我不熟悉。
    【解决方案3】:

    您好,这种情况经常发生。以下是只需三个简单步骤即可完成的操作

    1. 转到您应用的迁移目录

    2. 删除 0001_initial.py 或 allnumbers_initial.py

    3. 运行 makemigrations 并再次迁移。你的问题一定会解决的。

    【讨论】:

      【解决方案4】:
      1. pip install sqlparse ==0.2.4
      2. 转到迁移目录
      3. 删除0001_initial.py
      4. python manage.py makemigrations
      5. python manage.py migrate
      6. python manage.py runserver
      7. 您将能够登录:http://127.0.0.1:8000/login/

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-23
        • 2023-03-22
        • 2017-06-11
        • 1970-01-01
        • 1970-01-01
        • 2019-09-30
        • 2011-10-19
        • 2018-03-03
        相关资源
        最近更新 更多