gpt4 book ai didi

mysql - 我应该在SqlAlchemy中使用relationship()吗?

转载 作者:行者123 更新时间:2023-11-29 13:24:36 27 4
gpt4 key购买 nike

我担心使用 relationship() 时的性能在 SqlAlchemy 中。例如,我有2个表:UsersBlogPosts ,并且它们之间的关系是一对多的。如果我使用 relationship() , user.blogSpots将是 BlogPost 的列表,所以我假设一个用户(Alex)有 100 万 BlogSpot ,哦,user.blogSpots非常大,因为它包含 100 万个项目,对吗?如果正确的话,它必须从数据库中获取 100 万条结果行?我认为在现实世界的应用程序中,数据很大,性能可能会下降。

那么relationship()有什么好处呢?在 SqlAlchemy 中?使用普通的“sql 查询” limit子句更好(内存+性能),不是吗?

最佳答案

关系的好处实际上非常简单:列出/添加/删除/更新相关实体。

但是,您描述的情况是应该以非默认方式处理关系的特殊情况之一。我建议您阅读Working with Large Collections Collection Configuration and Techniques的部分在文档中。

适用于您的情况的是使用动态关系,它仅返回预先配置的查询,因此您可以根据需要进一步处理它:

  • 应用过滤器
  • 应用限制以仅选择按字段 X 等排序的前 N ​​个

像这样的东西是一个用法示例:

class Users(Base):
blogSpots = relationship("BlogPosts", lazy="dynamic")
...
user1 = session.query(Users).get(1)
assert user1
top10byDate = users1.blogSpots.order_by(desc(BlogPosts.POSTED_DATE))[:10]
taggedTech = users1.blogSpots.filter(BlogPosts.tags.any(Tag.name == 'tech')[:10]

关于mysql - 我应该在SqlAlchemy中使用relationship()吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20316719/

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