gpt4 book ai didi

sql - 在单个查询中获取 Django 模型中的 ManyToMany 字段的优化方式

转载 作者:行者123 更新时间:2023-12-04 16:35:56 26 4
gpt4 key购买 nike

我在 Django 中有以下模型结构。

Category:
- name
- description

Tag:
- name

Article:
- guid
- title
- detail
- tags (Many2Many with Tag)
- cats (Many2Many with Category)

现在,在我的批量(最多 100,000 篇)文章更新作业中,我必须执行以下操作。

- for each article:
- to check if this article has already appeared in another category
- if yes, associate article with current category
- if no, create article along current category
- to check if any of associated tags are exists or not,
- if not exists create tag, and associate with current article
- if exists, just associated with current article

在执行此操作时,我已经有了从数据库中获取的现有文章的字典。

由于 ManyToMany 字段对 django 中的 select_related() 等获取操作没有任何影响,是否有任何其他方法可以帮助我加载现有文章以及类别和标签?

最佳答案

如果您添加 intermediary table对于多对多关系,例如 ArticleTag 您可以通过 django 的 ORM 查询此表并在其上使用 select_related:

# Get all 'tag-relations' WITH associated articles AND tags
articles_tags = ArticleTag.objects.all().select_related()

然后您可以遍历结果并检查我是否与标签相关联的特定文章...我想在 django 中没有其他方法可以直接查询表示关系的表而不指定 through-model,否则你仍然可以使用原始 sql 查询来查询它。如果你有很多数据,这可能会产生大量的 ram 使用,但是你只会访问数据库一次!

关于sql - 在单个查询中获取 Django 模型中的 ManyToMany 字段的优化方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4601953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com