微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django bulk_create 忽略外键完整性错误

如何解决Django bulk_create 忽略外键完整性错误

我正在使用带有 sqlite 数据库的 django,我需要从 json 文件加载条目。

由于有很多条目(1.9 亿),我必须使用bulk_create。 不幸的是,我们只有一个不完整的数据库,因此有时应该将值插入到没有匹配外键的多对多关系中。 在这种情况下,我收到以下错误

django.db.utils.IntegrityError: 表中的行 主键为“1”的“projects_paper_citing_literature”无效 外键:projects_paper_citing_literature.to_paper_id 包含一个 值 '90241d37be4b06dd9b2f4ee4cf8de9089d7ea9ce' 没有 project_paper.paper_id 中的对应值。

我发现可以使用 ignore_conflicts=True 解决其他一些错误。但是,这不适用于这些错误:请参阅下面的代码

不幸的是,由于条目数量众多,如果这两个条目确实存在,则在每次插入之前检查 filter() 也是不可能/缓慢的。

我读取数据库代码是:

def load_citations(paper_json_entries: List[Dict[str,any]]):
 
    paper_cites_paper_relationship = Paper.citing_literature.through
    citations: List[paper_cites_paper_relationship] = []

    for paper_json in paper_json_entries:
        base_paper_id: int = paper_json['id']

        for citation_id in paper_json['outCitations']:
            new_citation: paper_cites_paper_relationship = paper_cites_paper_relationship(
                from_paper_id=base_paper_id,to_paper_id=citation_id)
            citations.append(new_citation)



    paper_cites_paper_relationship.objects.bulk_create(citations,ignore_conflicts=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。