SQLAlchemy之懒加载

懒加载

  • 在一对多,或者多对多关系的时候,如果想要获取多的一方这一部分的数据的时候,往往能通过一个属性就可以全部获取了。
  • 如有一个作者,想要这个作者的所有文章,通过user.articles就可以获取所有的。
  • 但有时候我们不想获取所有的数据,如只想获取这个作者今天发表的文章,那么这时候我们可以给relationship方法添加属性lazy='dynamic',以后通过user.articles获取到的就不是一个列表,而是一个AppenderQuery对象了。这样就可以对这个对象再进行一层过滤和排序等操作。
  • 通过lazy='dynamic',获取出来的多的那一部分的数据,就是一个AppenderQuery对象了。这种对象既可以添加新数据,也可以跟Query一样,可以再进行一层过滤。

lazy可用的选项

  1. select:这个是默认选项。还是拿user.articles的例子来讲。如果你没有访问user.articles这个属性,那么sqlalchemy就不会从数据库中查找文章。一旦你访问了这个属性,那么sqlalchemy就会立马从数据库中查找所有的文章,并把查找出来的数据组装成一个列表返回。这也是懒加载

  2. dynamic:这个也是懒加载。就是在访问user.articles的时候返回来的不是一个列表,而是AppenderQuery对象。

  • 总结:如果你在获取数据的时候,想要对多的那一边的数据再进行一层过滤,那么这时候就可以使用lazy='dynamic'

#懒加载
author = relationship("User", backref=backref("articles",lazy="dynamic"))

发布了365 篇原创文章 · 获赞 4 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_44733660/article/details/104095098