FastAPI 本身并不直接支持数据库事务。事务处理通常由数据库客户端或数据库驱动程序处理。对于 MongoDB 和 FastAPI,你可以使用 motor
库(MongoDB 的异步 Python 驱动程序)来实现事务。
以下是使用 motor
在 FastAPI 中执行 MongoDB 事务的步骤:
1. 安装必要的库:
bash
pip install fastapi motor
2. 创建 MongoDB 连接和客户端:
python
from fastapi import FastAPI
from motor.motor_asyncio import AsyncIOMotorClient
app = FastAPI()
# MongoDB 连接信息
MONGO_URI = "mongodb://localhost:27017"
DATABASE_NAME = "your_database_name"
# 创建 MongoDB 客户端
client = AsyncIOMotorClient(MONGO_URI)
database = client[DATABASE_NAME]
3. 在 FastAPI 路由中使用事务:
python
@app.post("/items/", status_code=201)
async def create_item(item: Item):
async with await client.start_session() as session:
async with session.start_transaction():
try:
# 在这里执行多个数据库操作
# 例如:
result1 = await database["collection1"].insert_one({"field1": "value1"}, session=session)
result2 = await database["collection2"].insert_one({"field2": "value2"}, session=session)
# 如果所有操作都成功,则提交事务
await session.commit_transaction()
return {"message": "Transaction successful"}
except Exception as e:
# 如果出现任何错误,则回滚事务
await session.abort_transaction()
return {"message": "Transaction failed", "error": str(e)}
解释:
- 我们使用
start_session()
方法启动一个新的 MongoDB 会话。 - 然后,我们使用
session.start_transaction()
方法启动一个事务。 - 在
try
块中,我们执行多个数据库操作。请注意,我们在所有操作中都传递了session=session
参数,以确保它们是事务的一部分。 - 如果所有操作都成功完成,我们使用
session.commit_transaction()
方法提交事务。 - 如果出现任何错误,我们使用
session.abort_transaction()
方法回滚事务。
注意事项:
- 确保你的 MongoDB 版本支持事务(4.0 或更高版本)。
- 在生产环境中,你应该使用更强大的错误处理和日志记录机制。
- 考虑使用合适的数据库设计和索引策略来优化事务性能。