就是项目启动 数据库就连接好了 不用每次参数带着?
时间: 2024-09-15 08:03:59 浏览: 20
在FastAPI项目中,为了在应用程序启动时自动连接数据库,可以在`main.py`或其他启动文件中添加一些初始化步骤。通常,我们可以利用异步事件循环来确保在服务器启动时执行连接操作。以下是如何做到这一点的基本步骤:
1. 创建一个`dependencies.py`文件,如果还没有,用于存放依赖项函数:
```python
from fastapi import FastAPI, Depends
from .db import get_db # 假设get_db是从your_database_module导入的
app = FastAPI()
# 注册数据库连接依赖
@app.middleware("http")
async def db_connection_middleware(request, call_next):
db = await get_db()
request.state.db = db
response = await call_next(request)
await db.disconnect()
return response
```
这里定义了一个HTTP中间件`db_connection_middleware`,它在每个请求开始时获取数据库连接,并在请求结束时释放连接。
2. 在数据库模块`db.py`中,创建数据库连接函数`get_db()`:
```python
import asyncio
from sqlalchemy import create_engine, event
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
...
async def get_db():
engine = create_async_engine(DATABASE_URL)
event.listen(engine, 'connect', _on_connect)
session_maker = AsyncSession(bind=engine)
return session_maker
async def _on_connect(conn):
conn.info['sa'] = True
```
`event.listen`监听数据库连接事件, `_on_connect`函数在此处用于做一些额外的连接处理,比如设置标志。
现在,当项目启动时,FastAPI会自动连接数据库并在每个HTTP请求之间管理连接。不需要在每个视图函数中显式传递数据库连接。