Flask Mega教程中参数位置错误及双lazy='dynamic'疑问求解
问题解决:Flask关联关系语法错误及lazy参数说明
语法错误修复
你的代码里的语法错误出在secondaryjoin这一行——你用了函数调用式的括号,却没加关键字赋值。在Python里,位置参数不能放在关键字参数之后,primaryjoin已经是关键字参数,后面的secondaryjoin必须同样用secondaryjoin=(...)的形式,否则会被当成位置参数,触发报错。
修复后的代码:
followed = db.relationship( 'User', secondary=followers, primaryjoin=(followers.c.follower_id == id), secondaryjoin=(followers.c.followed_id == id), # 这里加上=号,改成关键字参数 backref=db.backref('followers', lazy='dynamic'), lazy='dynamic')
两个lazy='dynamic'的作用
这两个参数分别控制正向关系和反向关系的加载行为:
- 末尾的
lazy='dynamic':控制当前的followed属性,当你通过user.followed查询用户关注的人时,不会直接返回列表,而是返回一个SQLAlchemy的动态查询对象(Query实例),你可以继续链式调用过滤、分页等方法,比如user.followed.filter_by(...)。 backref里的lazy='dynamic':控制反向的followers属性,当你通过user.followers查询关注该用户的人时,同样返回动态查询对象,支持后续的查询操作,不用先把所有数据加载到内存里,适合数据量较大的场景。
内容的提问来源于stack exchange,提问作者kbot13
相关产品推荐
相关产品推荐

