You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 04:34:52