查询参数只返回一个结果

Query parameter only returning one result

我似乎无法理解为什么以下只返回第一个结果?当有多个同名的学生时,我显然正在翻阅字典。有什么想法吗?

    students = {
    1: {
        "name": "John",
        "age": 18,
        "hobbies": ["Programming", "Swimming", "working out"]
    },
    2: {
        "name": "John",
        "lol": "random",
        "age": 18,
        "hobbies": ["Programming, swimming, working out"]
    },
     3: {
        "name": "Bob",
        "age": 18,
        "hobbies": ["Programming", "Swimming", "working out"]
    },
}
@app.get("/get-student")
async def get_student_by_name(name : str):
    for id in students:
        if students[id]["name"] == name:
            return students[id]
    return {"Data": "Student not found"} 

返回的结果永远是字典中的第一个

这将不起作用,因为您在循环内使用 'return' 语句,例如,如果您正在寻找 'john' 第一次找到此参数 return 是执行和功能结束。 例如,您可以保存这些值并 return 它们全部,让我告诉您:

  • 而不是 return,在函数的开头声明一个列表 ids = [],每次找到 john 时,将 id 添加到结果列表中,ids.append(students[id ]).最后在循环之后只是 return ids 列表,或者如果 len(ids) 是 0 只是 return None 用于错误管理。

代码示例:

    @app.get("/get-student")
    async def get_student_by_name(name : str):
        ids = []
        for id in students:
            if students[id]["name"] == name:
                ids.append(students[id])
        if len(ids) is 0:
            return {"Data": "Student not found"}
        else:
            return ids