当前位置: 首页 > 知识库问答 >
问题:

如何实现大于或小于 FastAPI 的查询参数

袁骏祥
2023-03-14

我想构建一个类似于< code>/cities的endpoint。population__gt=100000获取人口超过100,000的所有城市。

在FastAPI中最好的方法是什么?我不喜欢列举给定字段的所有可能的操作符,比如:

@app.get("/cities")
def get_city(
    population: int = None,
    population_gt: int = None,
    population_gte: int = None,
    population_lt: int = None,
    population_lte: int = None):
    return ...

共有1个答案

罗星洲
2023-03-14

实现这一点的一种方法是传递运算符(即gtlt等),并为每个操作都有一个单独的函数,如果收到运算符,您可以调用该函数。下面的示例。您可以根据需要调整/添加函数。

def gt(population):
    return f"operator: gt, population: {population}"
 
def gte(population):
    return f"operator: gte, population: {population}"
 
def lt(population):
    return f"operator: lt, population: {population}"

def lte(population):
    return f"operator: lte, population: {population}"
   
operators = {"gt": gt, "gte": gte, "lt": lt, "lte": lte}
   
@app.get("/cities")
def get_city(population: int = None, operator: str = None):
    if operator in operators:
        result = operators[operator](population)
        return result
    else:
        return "Operator Not Found!"

正如您刚才所说,因为这是多个参数所需要的,所以我建议使用类似的方法,您可以在每个键的值中传递运算符,然后在服务器端提取它,例如/city?人口=~gt~100000

要接收查询参数的多个值,例如上面给出的示例URL中的总体,执行诸如之类的操作,其中总体大于

下面的示例让您了解了使用人口参数的这种方法背后的逻辑,并展示了如何在服务器端提取运算符和实际值。然后由您定义所需的其余参数,以及如何处理这些数据;例如,使用与上面类似的方法(每个操作都有一个函数),或者在循环数据时构建将要传递到数据库的查询。

import re
pattern = "~(.*?)~"
 
@app.get("/cities")
def get_city(population: List[str] = Query(None)):
    pop_qs = {}
    
    for p in population:
        try:
            pop_opr = re.search(pattern, p).group(1)
            pop_no_str = re.sub(r"^~.*?~", "", p)
        except:
            return "Invalid data received"
        try:
            pop_no = int(pop_no_str)
            pop_qs.update({pop_opr : pop_no})
        except ValueError:
            return f"Cannot convert '{pop_no_str}' to Integer."
            
    return pop_qs

 类似资料:
  • 我有一种情况,我需要检查金额并相应地返回回复。 如果金额是 请参考请求正文中的示例json。 {“帐户名称”:“ABCZYZ”、“特殊代码”:“MYCODE”、“金额”:“100”、“货币类型”:“MYCURRENCY”} 下面是我的wiremck映射文件 {“request”:“{“urlPattern”:“/some/url”,“method”:“POST”,“bodyPatterns”:[{

  • 我正在编写一个Fast API服务器,它接受请求,检查用户是否被授权,如果成功,则将其重定向到另一个URL。 我需要携带URL参数,例如

  • 我不明白 FastAPI 中的可选查询参数。它与默认值为 的默认查询参数有何不同? 在下面的示例中,arg1和arg2有什么区别?在该示例中,arg2是一个可选的查询参数,如上面的链接所述。

  • 我12哟,我学习Java,我想做如果语句时,它是超过1和小于或等于4,或只是2和4之间,但它不工作。我试过了 <代码>如果(4 它显示了这个错误

  • 问题内容: 我有几个查询,其中大多数是: 和 由于它们都是一个范围,因此在col和date上使用未聚类的b +树索引会是加快查询速度的一个好主意吗?还是哈希索引?还是没有索引会更好? 问题答案: 在 过滤谓词上 用作 日期范围条件 的列上创建 INDEX 应该很有用,因为它将执行 INDEX RANGE SCAN 。 这是有关如何在Oracle中创建,显示和阅读EXPLAIN PLAN 的演示。

  • 问题内容: 我熟悉Swift中的语句,但想知道如何用来替换这段代码: 问题答案: 这是一种方法。假设是或其他,则可以选择将操作数分配给新变量。这样,您就可以使用关键字来对其进行范围划分: 可以简化一下: 您还可以完全避免关键字与范围匹配: