SQLAlchemy内连接NoneType不可迭代以避免count()
我需要检查学生是否通过了这个考试,考试的ID在一个叫做marks的表里,这个表和学生表还有考试表是有关系的。
student, exam = session.query(StudentModel,MarkModel)
.join(MarkModel)
.filter(and_(StudentModel.uuid == uuid, MarkModel.exam_id == exam_id))
.first()
但是当这个数据不在数据库里时,我会遇到一个错误,提示NoneType is not iterable
。
我该怎么检查而不想触发这个错误呢?我希望避免执行两次或更多次查询(比如先用计数来检查)。
1 个回答
2
.first()
方法会返回一个查询结果,或者返回 None
。如果没有找到匹配的结果,first()
就会返回 None
,而尝试从 None
中提取内容会失败。
你可以通过先把结果存起来来明确检查是否是 None
:
result = session.query(StudentModel,MarkModel).join(MarkModel).filter(
and_(StudentModel.uuid == uuid, MarkModel.exam_id == exam_id)).first()
if result is not None:
student, exam = result
或者你也可以直接捕获异常:
try:
student, exam = session.query(StudentModel,MarkModel).join(MarkModel).filter(
and_(StudentModel.uuid == uuid, MarkModel.exam_id == exam_id)).first()
except TypeError:
# None returned, unpacking failed
student = exam = None