ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

python – Django 2.0:sqlite IntegrityError:FOREIGN KEY约束失败

2019-06-22 12:46:57  阅读:268  来源: 互联网

标签:python sqlite django foreign-keys django-2-0


我正在努力为django-pagetree库添加Django 2.0支持.在自动化测试期间,使用sqlite内存数据库,我遇到了一堆这样的错误:

  File "/home/nnyby/src/django-pagetree/pagetree/tests/test_models.py", line 638, in setUp
    'children': [],
  File "/home/nnyby/src/django-pagetree/pagetree/models.py", line 586, in add_child_section_from_dict

...

  File "/home/nnyby/src/django-pagetree/venv/lib/python3.5/site-packages/django/db/backends/base/base.py", line 239, in _commit
    return self.connection.commit()
django.db.utils.IntegrityError: FOREIGN KEY constraint failed

这在Django 2.0发行说明中注明:https://docs.djangoproject.com/en/2.0/releases/2.0/#foreign-key-constraints-are-now-enabled-on-sqlite

从那个我不完全理解的描述来看,这不应该适用于不持久的测试数据库,对吧?使用Django 2.0时,不会使用适当的选项创建我的sqlite测试数据库吗?

我用于测试的应用程序设置如下:https://github.com/ccnmtl/django-pagetree/blob/master/runtests.py

解决方法:

文档说两件事:

>如果您有ForeignKey约束,则它们现在在数据库级别强制执行.因此,请确保您没有违反外键约束.这是导致问题的最可能原因,但这意味着您已经看到了其他数据库的这些问题.在代码中查找这样的模式:

# in pagetree/models.py, line 810
@classmethod
def create_from_dict(cls, d):
    return cls.objects.create()  # what happens to d by the way?

由于PageBlock必须具有section,因此肯定会因ForeignKey约束错误而失败,因此如果不先分配它,就无法调用create.
>如果通过执行原子事务(例如)来延迟提交外键来绕过外键约束,则外键需要初始化.实际上,您的测试数据库应该已经拥有,因为它每次都会重建.

标签:python,sqlite,django,foreign-keys,django-2-0
来源: https://codeday.me/bug/20190622/1263553.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有