Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
我担心在SqlAlchemy中使用
那么SqlAlchemy中
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
我担心在SqlAlchemy中使用
relationship()
时的性能。例如,我有2个表:Users
和BlogPosts
,它们之间的关系是一对多的。如果我使用relationship()
,则user.blogSpots
将是BlogPost
的列表,所以我假设一个用户(Alex)拥有100万个BlogSpot
,哦,user.blogSpots
很大,因为它包含100万个项目,对?如果正确,它必须从数据库中获取一百万个结果行?我认为在现实世界的应用程序中,数据量巨大,并且性能可能会下降。那么SqlAlchemy中
relationship()
的好处是什么?在limit
子句中使用普通的“ sql查询”会更好(内存+性能),不是吗? 最佳答案
relationship
的好处实际上非常简单:列出/添加/删除/更新相关实体。
但是,您描述的情况是一种特殊情况,其中一种情况应以非默认方式处理关系。我建议您阅读文档中的Working with Large Collections的Collection 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