当前位置: 首页 > news >正文

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  # 可以删掉

相关文章:

  • 基于C++(MFC)图形编辑界面工具
  • 一个可以自定义Java服务名日志打印的小工具
  • CSS 文件格式
  • Ubuntu上安装Mysql
  • redis利用备忘录
  • 在 Vue 3 中将拆分后的数组合并回原数组
  • 云轴科技ZStack入选中国人工智能产业发展联盟《大模型应用交付供应商名录》
  • Muduo网络库实现 [十六] - HttpServer模块
  • 线上蓝桥杯比赛环境配置
  • C#中扩展方法和钩子机制使用
  • 中间件--ClickHouse-9--MPP架构(分布式计算架构)
  • 51单片机实验六:通用型1602液晶操作方法
  • 使用DeepSeek生成PPT的详细指南
  • Oracle、MySQL、PostgreSQL三大数据库对比分析
  • Python爬虫第16节-动态渲染页面抓取之Selenium使用上篇
  • kubernetes-使用ceph-csi
  • vscode中markdown一些插件用不了解决方式
  • HTML 初识
  • 本地部署ai图片转生成视频,一键运行包的制作教程。
  • AbMole| Lofexidine hydrochloride(CAS号21498-08-8;目录号M3169)
  • 商务部:中国加快推进服务业扩大开放综合试点为世界注入更多确定性
  • 圆桌|耐心资本对科技创新有何意义?天使投资最关注哪些要素?
  • 瑞安房地产王颖:房地产市场看到很好的信号,上海项目销售压力不大
  • 杭州一地铁口建筑被吐槽像棺材,官方回应:暂无拆除计划
  • 财政部关于六起地方政府隐性债务问责典型案例的通报
  • 马上评|上海市领导调研外贸外资企业,为何强调这三句话