如何解决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 举报,一经查实,本站将立刻删除。