在 app.on_event('startup') 中连接到数据库与在 FastAPI 中的依赖项之间的区别

Posted

技术标签:

【中文标题】在 app.on_event(\'startup\') 中连接到数据库与在 FastAPI 中的依赖项之间的区别【英文标题】:Difference between connecting to the database in app.on_event('startup') vs in a dependency in FastAPI在 app.on_event('startup') 中连接到数据库与在 FastAPI 中的依赖项之间的区别 【发布时间】:2021-05-05 15:10:12 【问题描述】:

在 Tiangolo 的 FastAPI 中,它声明您可以使用依赖项创建持久的数据库连接

https://fastapi.tiangolo.com/tutorial/sql-databases/#create-a-dependency

但是,在异步数据库文档中,数据库是在应用启动时连接的

https://fastapi.tiangolo.com/advanced/async-sql-databases/#connect-and-disconnect

在编码/数据库文档中遵循相同的模式

https://www.encode.io/databases/connections_and_transactions/

哪个是正确的模式?在我看来,使用依赖项,每个 API 调用将创建一个数据库连接,而在启动期间连接数据库将为每个工作人员建立一个数据库连接。如果这是正确的,那么在启动时连接到数据库会更好。

两者有什么区别,哪一个更好?

【问题讨论】:

【参考方案1】:

我不会详细介绍每个数据库库。我只想说,大多数现代工具都使用连接池。他们显式或隐式地这样做,隐藏在您的第一个链接中的 Session 等某些抽象后面。

在您的所有示例中,连接池都是在应用程序启动时创建的。并且在创建session时,并没有建立新连接的繁重操作,只是从池中取出一个连接,当会话关闭时,将连接返回池中。

【讨论】:

以上是关于在 app.on_event('startup') 中连接到数据库与在 FastAPI 中的依赖项之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

win7下startup怎么没有了

startup ‘startup‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

tomcat启动时startup.bat一闪而过,在startup.bat文档后边加pause之后,出现一个界面,这种怎么解决?

json 请在此处查看完整的启动矩阵:https://github.com/startup-matrix/startup-matrix

net core 在startup以外的地方怎么取到iservicecollection

在 Startup.cs 中使 ConfigureServices 方法异步