懒加载
- 在一对多,或者多对多关系的时候,如果想要获取多的一方这一部分的数据的时候,往往能通过一个属性就可以全部获取了。
- 如有一个作者,想要这个作者的所有文章,通过
user.articles
就可以获取所有的。
- 但有时候我们不想获取所有的数据,如只想获取这个作者今天发表的文章,那么这时候我们可以给
relationship
方法添加属性lazy='dynamic'
,以后通过user.articles
获取到的就不是一个列表,而是一个AppenderQuery
对象了。这样就可以对这个对象再进行一层过滤和排序等操作。
- 通过
lazy='dynamic'
,获取出来的多的那一部分的数据,就是一个AppenderQuery
对象了。这种对象既可以添加新数据,也可以跟Query
一样,可以再进行一层过滤。
lazy可用的选项
-
select
:这个是默认选项。还是拿user.articles
的例子来讲。如果你没有访问user.articles
这个属性,那么sqlalchemy
就不会从数据库中查找文章。一旦你访问了这个属性,那么sqlalchemy
就会立马从数据库中查找所有的文章,并把查找出来的数据组装成一个列表返回。这也是懒加载
。
-
dynamic
:这个也是懒加载。就是在访问user.articles
的时候返回来的不是一个列表,而是AppenderQuery
对象。
- 总结:如果你在获取数据的时候,想要对多的那一边的数据再进行一层过滤,那么这时候就可以使用
lazy='dynamic'
。
author = relationship("User", backref=backref("articles",lazy="dynamic"))