如何在Flask和Flask-SQLAlchemy中过滤查询提交给指定教师的作业
建议帖子标题
Flask-SQLAlchemy 查询指定教师收到的已提交作业返回空结果如何解决?
问题原因
你写的查询方法缺失了Flask-SQLAlchemy模型必需的query查询对象,直接在模型类上调用filter方法不会生效,这是新手最常见的写法错误。
修正后的代码
基础修复版(直接解决查询为空问题)
@classmethod # 写在Assignment类中 def get_assignments_by_teacher(cls, teacher_id): return cls.query.filter(cls.teacher_id == teacher_id).all()
优化版(贴合业务需求)
你的业务场景是拉取学生提交给教师的作业,草稿状态的作业不需要被教师侧查询到,建议补充状态过滤条件:
@classmethod # 写在Assignment类中 def get_assignments_by_teacher(cls, teacher_id): return cls.query.filter( cls.teacher_id == teacher_id, cls.state == AssignmentStateEnum.SUBMITTED ).all()
可选排查方案
如果修改后仍有异常,可按以下步骤定位问题:
- 打印传入的
p.teacher_id值,确认该ID确实存在于teachers表的id字段中,不存在传参错误 - 打印生成的SQL语句确认查询条件符合预期:
# 放在查询方法中即可输出最终执行的SQL print(cls.query.filter(cls.teacher_id == teacher_id)) - 检查
assignments表中对应teacher_id的记录,state字段值是否符合过滤要求。
内容的提问来源于stack exchange,提问作者Shree
相关产品推荐
相关产品推荐

