python中MongoDB 的两个驱动

下面这段代码导入了 MongoDB 的两个驱动:

python 复制代码
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 就是你和数据库交互的异步入口。
  • 它的用法就像这样:
python 复制代码
from motor.motor_asyncio import AsyncIOMotorClient

client = 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,用在传统的同步项目里。

示例用法:

python 复制代码
from pymongo import MongoClient

client = 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 抛出的一个 连接错误异常,你可以用来捕获"数据库连接不上"的情况。

比如:

python 复制代码
from pymongo import MongoClient
from pymongo.errors import ServerSelectionTimeoutError

try:
    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

那你只需要保留这句就行:

python 复制代码
from motor.motor_asyncio import AsyncIOMotorClient

除非你想要写一个通用的兼容层同时支持同步和异步客户端,否则:

python 复制代码
from pymongo import MongoClient  # 可以删掉
相关推荐
leisoo80978 分钟前
100GBA股股票数据怎么存ClickHouseRedisMySQLJSON完整对比
大数据·linux·服务器·开发语言·python
WangYan202219 分钟前
基于XGBoost与AI的生态—地学多源数据建模:植被与土地利用识别、土壤碳氮空间预测、生物多样性驱动机制、土壤微生物功能预测、生态退化与风险识别
python·机器学习·xgboost
不会代码的小猴44 分钟前
21. 泛型编程上
开发语言·c++·笔记·算法
一只旭宝2 小时前
细讲C加加【9】C++ std::function与std::bind详解|仿函数、绑定器、类成员绑定、占位符、成员偏移指针
开发语言·c++·算法
金銀銅鐵3 小时前
[Python] 借助 turtle 逐字展示唐诗《金缕衣》
python
coder!mq4 小时前
说几个常见的语法糖?
java·开发语言·算法
gugucoding4 小时前
38. 【Java】Stream API(下):高级操作与性能
java·开发语言
Lhan.zzZ4 小时前
在 Visual Studio 2022 中打造可扩展的动态链接库模块:从零搭建到原理解析
开发语言·c++·visual studio
心平气和量大福大4 小时前
android-实例-蒲公英-更新与安装-5-签名与生成APK
android·java·开发语言
码哥DFS4 小时前
构造函数、实例对象、对象原型 ----三者关系
开发语言·javascript·原型模式