【问题标题】:FastAPI Post request with database depends, object is not callableFastAPI Post请求与数据库依赖,对象不可调用
【发布时间】:2022-10-05 04:19:28
【问题描述】:

出于某种原因,我无法传递参数并收到以下错误,但是,如果我要删除字符串,一切都会正常运行。如果其他人遇到这样的错误,请告诉我如何解决它!

这就是我的 API 的样子:

@router.post("/post")
async def post_request(
     db: Session = Depends(database.get_db(string_here="string")
):
    return ...

和一个数据库文件

def get_db(string_here: str):
    .... returns a db

错误:

raise TypeError('{!r} is not a callable object'.format(obj))
TypeError: <generator object get_db at 0x000001FCFD7A8900> is not a callable object

【问题讨论】:

  • 触发错误的实际行是什么? get_db 的实际定义是什么?
  • 触发错误的行在第一个代码块中,其中 DB 依赖于 get_db()。它是对 get_db() 的调用,它没有到达方法内部。这是触发此错误的调​​用。
  • 对,但是什么get_db 回来了吗?它返回一个函数,还是只返回一个数据库?似乎您正在产生数据库连接,而不是返回依赖调用可以调用的函数。
  • 只是一个数据库

标签: database post sqlalchemy fastapi depends


【解决方案1】:

这似乎解决了我的问题。我不完全理解它为什么有效,但它确实有效。如果有人想澄清其背后的逻辑,我将不胜感激。

https://stackoverflow.com/a/12074749/18347899

你不需要调用你的生成器,删除 () 括号。

您可能对函数内部的变量使用与生成器名称相同的名称这一事实感到困惑;以下也将起作用:

def somefun(lengen):
    for length in lengen:
        if not is_blahblah(length): return False

然后将传递给somefun 函数的参数绑定到局部lengen 变量而不是lengths,以明确该局部变量与您在别处定义的lengths() 函数不同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-08
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    • 2022-08-17
    • 2023-01-08
    • 2017-07-29
    • 1970-01-01
    相关资源
    最近更新 更多