gpt4 book ai didi

python - 在 App Engine DB 中选择多对多技术

转载 作者:太空狗 更新时间:2023-10-30 02:49:44 26 4
gpt4 key购买 nike

我的 App Engine 应用程序中将有“文章”和“标签”。

有两种技术可以实现(感谢 Nick Johnson's article ):

# one entity just refers others
class Article(db.Model):
tags = db.ListProperty(Tag)

# via separate "join" table
class ArticlesAndTags(db.Model):
article = db.ReferenceProperty(Article)
tag = db.ReferenceProperty(Tag)

根据以下任务,我应该更喜欢哪一个?

  • 创建标签云(经常),
  • 按标签选择文章(很少)

最佳答案

由于 appengine 的 map reduce 中缺少“reduce”功能(也没有 SQL group by like 查询),标签云很难有效实现,因为您需要手动计算所有标签。无论你使用哪种实现方式,我对标签云的建议是有一个单独的模型 TagCounter 来跟踪你有多少标签。否则,如果您有很多标记查询,那么它可能会变得昂贵。

class TagCounter:
tag = db.ReferenceProperty(Tag)
counter = db.IntegerProperty(default=0)

每次您选择更新文章上的标签时,请确保相应地从该表中递增和递减。

至于通过标签选择文章,第一个实现就足够了(第二个过于复杂了)。

class Article(db.Model):
tags = db.ListProperty(Tag)

@staticmethod
def select_by_tag(tag):
return Article.all().filter("tags", tag).run()

关于python - 在 App Engine DB 中选择多对多技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6943524/

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