gpt4 book ai didi

python - 为什么我们使用 yield 在 Fastapi 中使用 sqlalchemy 获取 Sessionlocal?

转载 作者:行者123 更新时间:2023-12-03 23:42:48 31 4
gpt4 key购买 nike

def get_db():
db = SessionLocal()
try:
return db
finally:
db.close()
我截断了这段代码,以便使用 Sqlalchemy 在 fastapi 中获取 Sessionlocal。好吧,当我使用 return 而不是 Yield 时。我的代码仍然有效。然后,我不明白使用 Yield 的原因。有人能帮我吗?

最佳答案

Well, when I used return instead of Yield. My code still works. Then, I do not understand the reason of using Yield.


这是一个很好的问题,答案是 是的, 使用 yield 而不是 return 是有原因的。
SQLAlchemy 默认有一个 Connection Pooling 机制。这意味着通过 yield 您为每个请求创建一个单一的季节。当您使用 return 时,您将为所有应用程序使用单个数据库连接。
不是很清楚吗?让我们想象一下,让事情变得更有趣。
enter image description here
那么我们在这个例子中有什么?
  • 包含 5 个不同连接的连接池。
  • 2 端点
  • 3 个传入请求。

  • 当您使用 yield 时,它在下面看起来像这样,因为它转到端点向数据库询问某些内容,并且每次 yield 创建一个新的 Session 对象。它提供了围绕一系列操作的事务范围,但在那里使用 return 而不是 yield 只会返回该 session 对象。

    关于python - 为什么我们使用 yield 在 Fastapi 中使用 sqlalchemy 获取 Sessionlocal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64763770/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com