在Django中使用两个数据库时出错:sqlite3.IntegrityError: NOT NULL constrai



我正在使用两个数据库的Django项目Wagtail工作。第一个是所有django模型的标准sql lite数据库(称为db_tool.sqlite3),另一个也是sql lite,但用于wagtail集成(称为db.sqlite3)。

我想用以下命令

迁移到db_tool.sqlite3
python manage.py make migrations
python manage.py migrate --database db_tool

但现在我得到以下关于wagtail的错误信息,这是我以前从未得到过的。

django.db.utils.IntegrityError: NOT NULL constraint failed: wagtailcore_page.draft_title

首先:我不明白这一点,因为我特别命名了db_tool,我想知道,为什么当我试图迁移到db_tool时,wagtail集成会引发错误。

第二:我在我的wagtail-pages中没有看到特定的字段,称为draft_title,并且我目前没有任何草稿页。

第三:错误消息也与wagtail的迁移文件有关,该文件可以在侧包中找到(见下文)。所以也许这是错误的根源,但我不明白与其他错误信息的相关性,因为从现在起它工作得很好,除了我的wagtail页面的一些内容外,我没有改变任何东西。

File "C:Userspubr.condaenvsiqps_weblibsite-packageswagtailcoremigrations001_squashed_0016_change_page_url_path_to_text_field.py", line 23, in initial_data 
root = Page.objects.create(

我在这里使用的wagtail版本是wagtail 2.15.2,自从我开始这个项目以来我还没有更新过它…

由于事实,我的wagtail数据库有默认django数据库的名称,可能是可能的,我不小心尝试了一个迁移,这是为tool_db.sqlite3而没有在migrate-命令中命名它,并通过这样做导致这个错误?

所以我将非常感激如果有人知道,错误来自哪里,或者至少,我可以尝试修复它…

致以亲切的问候和感谢!

目前还不清楚您的数据库是否损坏。希望不是,但如果是,请在做其他事情之前备份每个。

这听起来像您可能一直在尝试在错误的数据库中操作。是否配置了DATABASE_ROUTERS ?我认为这可能有助于您防止代码从一个应用程序被引入到错误的数据库。Django文档中的示例主要关注于读取副本,但应该适应您的情况:https://docs.djangoproject.com/en/4.1/topics/db/multi-db/#an-example

如果您的数据库处于不正确的状态,请首先查看每个数据库中的djjango_migrations文件,然后仔细修剪混乱的文件,直到您恢复到您一直执行的分离。

相关内容

最新更新