大家好,我是木木。
今天给大家分享一个成熟的 Python 库,pymongo。
pymongo
pymongo 是 MongoDB 官方 Python 驱动,也是很多 MongoDB 上层封装的基础。它提供 MongoClient、集合操作、BSON 类型、批量写入、索引管理和连接池配置。对 Python 项目来说,PyMongo 的优势是直接、稳定、和 MongoDB 官方功能同步快;但也要求你理解文档模型、索引和连接超时,而不是把它当成普通 ORM。
项目地址:https://github.com/mongodb/mongo-python-driver
官方文档:https://www.mongodb.com/docs/languages/python/pymongo-driver/current/
三大特点
官方基础
MongoDB 官方驱动,覆盖同步、异步和 BSON 生态,是很多封装的底座。
文档直达
直接操作 database、collection 和文档,适合需要精细控制查询的项目。
批量完整
批量写入、索引和连接池配置都很成熟,适合生产服务。
最佳实践
安装方式:pip install pymongo。
第一段代码解决的问题是:创建 MongoClient 配置但不立即连接,适合启动时先检查默认库和超时参数。
importwarningswarnings.filterwarnings("ignore")fromimportlib.metadataimportversionfrompymongoimportMongoClientclient=MongoClient("mongodb://app:secret@db1.example.com:27017/shop?authSource=admin",connect=False,serverSelectionTimeoutMS=500,)print("package:",version("pymongo"))print("database:",client.get_default_database().name)print("nodes before connect:",sorted(client.nodes))print("timeout seconds:",client.options.server_selection_timeout)
第二段代码解决的问题是:MongoDB 文档里常见 ObjectId、Decimal128 等 BSON 类型,输出 JSON 时要用专门工具处理。
importwarningswarnings.filterwarnings("ignore")frombsonimportDecimal128,ObjectId,json_utildoc={"_id":ObjectId("656f1f77bcf86cd799439011"),"name":"Alice","balance":Decimal128("19.90"),"tags":["python","mongo"],}print(json_util.dumps(doc,ensure_ascii=False))
环境与版本信息
本文示例使用 Python 3.11,pymongo 4.17.0。示例使用 connect=False,只展示客户端配置、BSON 序列化和批量操作对象,不连接真实 MongoDB。
高级功能
进阶一点看批量写入和索引对象。先把操作对象准备好,再由 collection.bulk_write 或 create_indexes 执行。
importwarningswarnings.filterwarnings("ignore")frompymongoimportASCENDING,DESCENDING,IndexModel,UpdateOneops=[UpdateOne({"user":"alice"},{"$inc":{"points":3}},upsert=True),UpdateOne({"user":"bob"},{"$set":{"level":"pro"}},upsert=True),]index=IndexModel([("user",ASCENDING),("created_at",DESCENDING)],name="user_created_at",)print("bulk ops:",len(ops))print("op classes:",", ".join(op.__class__.__name__foropinops))print("index document:",index.document)
适用场景
适合 MongoDB 业务服务、数据同步脚本、日志文档存储、索引管理和需要直接控制查询语法的 Python 项目。
不适用场景
如果团队更需要 Django ORM 风格,可以考虑专门后端;如果数据强依赖复杂事务和 join,关系型数据库更自然。
上线检查
- 设置 serverSelectionTimeoutMS,避免故障时请求长期阻塞。
- 日志中不要输出包含账号密码的 MongoDB URI。
总结
pymongo 胜在直接和成熟。把连接、索引、BSON 类型和批量操作这些基本功打牢,它就是很可靠的 MongoDB 入口。