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 (将#修改为@)