python中MongoDB 的两个驱动
下面这段代码导入了 MongoDB 的两个驱动:
from motor.motor_asyncio import AsyncIOMotorClient
from pymongo import MongoClient
from pymongo.errors import ServerSelectionTimeoutError
✅ 每一行导入内容
1. from motor.motor_asyncio import AsyncIOMotorClient
👉 导入的是 Motor 驱动中的异步客户端,Motor
是 MongoDB 官方提供的 异步驱动库,可以和 Python 的 async/await
一起用。
AsyncIOMotorClient
就是你和数据库交互的异步入口。- 它的用法就像这样:
from motor.motor_asyncio import AsyncIOMotorClientclient = AsyncIOMotorClient("mongodb://localhost:27017")
db = client["my_database"]
collection = db["my_collection"]# 异步操作
result = await collection.find_one({"_id": ObjectId("..."}) # 注意 await!
📌 适合 FastAPI、Sanic、aiohttp 这类支持 async 的框架使用。
2. from pymongo import MongoClient
这是导入 MongoDB 的 同步驱动,也就是 pymongo
,用在传统的同步项目里。
示例用法:
from pymongo import MongoClientclient = MongoClient("mongodb://localhost:27017")
db = client["my_database"]
collection = db["my_collection"]# 同步操作
result = collection.find_one({"_id": ObjectId("...")})
📌 用在 Flask、Django(没有异步)这类同步项目里。
3. from pymongo.errors import ServerSelectionTimeoutError
这个是导入 pymongo 抛出的一个 连接错误异常,你可以用来捕获“数据库连接不上”的情况。
比如:
from pymongo import MongoClient
from pymongo.errors import ServerSelectionTimeoutErrortry:client = MongoClient("mongodb://localhost:27017", serverSelectionTimeoutMS=5000)client.server_info() # 尝试连接
except ServerSelectionTimeoutError:print("MongoDB 无法连接,请检查数据库服务是否启动")
❓那什么时候用 Motor
?什么时候用 pymongo
?
驱动 | 用途 | 适用场景 |
---|---|---|
pymongo | 同步驱动 | Flask、Django 同步项目 |
motor | 异步驱动(封装了 pymongo) | FastAPI、aiohttp、Sanic 等异步框架 |
⚠️ 它俩不能混用:
如果你用的是 Motor
(比如 AsyncIOMotorClient
),那整个代码都必须用 async/await
。
✅ 实际中应该选哪个?
如果项目是 async def
的函数,说明你用的是 异步 Mongo 驱动 Motor。
那你只需要保留这句就行:
from motor.motor_asyncio import AsyncIOMotorClient
除非你想要写一个通用的兼容层同时支持同步和异步客户端,否则:
from pymongo import MongoClient # 可以删掉