Closed. This question needs details or clarity。它当前不接受答案。
                            
                        
                    
                
                            
                                
                
                        
                            
                        
                    
                        
                            想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
                        
                        5年前关闭。
                                                                                            
                
        
我担心在SqlAlchemy中使用relationship()时的性能。例如,我有2个表:UsersBlogPosts,它们之间的关系是一对多的。如果我使用relationship(),则user.blogSpots将是BlogPost的列表,所以我假设一个用户(Alex)拥有100万个BlogSpot,哦,user.blogSpots很大,因为它包含100万个项目,对?如果正确,它必须从数据库中获取一百万个结果行?我认为在现实世界的应用程序中,数据量巨大,并且性能可能会下降。

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

最佳答案

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

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

适用于您的情况的是dynamic关系的用法,该关系仅返回预配置的查询,因此您可以根据需要进一步进行处理:


应用过滤器
应用限制以仅选择按字段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]

10-06 06:01