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

掌握Python3中PyMongo的用法 - 完整教程 | PyMongo操作指南

PyMongo入门教程

Python3操作MongoDB数据库的完整指南

PyMongo简介

PyMongo是Python操作MongoDB数据库的标准驱动库,提供了简单直观的API来执行数据库操作。

MongoDB是一种流行的NoSQL数据库,以其灵活性和扩展性而闻名,特别适合处理非结构化或半结构化数据。

安装PyMongo

使用pip安装PyMongo非常简单:

pip install pymongo

安装完成后,可以通过导入模块来验证安装是否成功:

import pymongo
print(pymongo.version)

连接MongoDB数据库

连接本地MongoDB实例的基本方法:

from pymongo import MongoClient

# 连接到本地默认实例
client = MongoClient('localhost', 27017)

# 连接到指定数据库
db = client['mydatabase']

# 获取集合(类似于SQL中的表)
collection = db['mycollection']

连接远程MongoDB服务器:

# 带认证的连接
client = MongoClient('mongodb://username:password@host:port/database')

基本CRUD操作

插入文档

# 插入单个文档
user = {
    "name": "Alice",
    "age": 30,
    "email": "alice@example.com"
}
insert_result = collection.insert_one(user)
print("插入文档ID:", insert_result.inserted_id)

# 插入多个文档
users = [
    {"name": "Bob", "age": 25, "email": "bob@example.com"},
    {"name": "Charlie", "age": 35, "email": "charlie@example.com"}
]
insert_results = collection.insert_many(users)
print("插入文档IDs:", insert_results.inserted_ids)

查询文档

# 查询单个文档
user = collection.find_one({"name": "Alice"})
print(user)

# 查询多个文档
for user in collection.find({"age": {"$gt": 25}}):
    print(user)

# 带条件的高级查询
results = collection.find({
    "age": {"$gte": 25, "$lte": 35},
    "name": {"$regex": "^B"}
})
for doc in results:
    print(doc)

更新文档

# 更新单个文档
update_result = collection.update_one(
    {"name": "Alice"},
    {"$set": {"age": 31}}
)
print("匹配文档数:", update_result.matched_count)
print("修改文档数:", update_result.modified_count)

# 更新多个文档
update_result = collection.update_many(
    {"age": {"$lt": 30}},
    {"$inc": {"age": 1}}
)
print("匹配文档数:", update_result.matched_count)
print("修改文档数:", update_result.modified_count)

删除文档

# 删除单个文档
delete_result = collection.delete_one({"name": "Charlie"})
print("删除文档数:", delete_result.deleted_count)

# 删除多个文档
delete_result = collection.delete_many({"age": {"$gt": 40}})
print("删除文档数:", delete_result.deleted_count)

高级功能

索引管理

# 创建单字段索引
collection.create_index("email")

# 创建唯一索引
collection.create_index("email", unique=True)

# 创建复合索引
collection.create_index([("name", pymongo.ASCENDING), ("age", pymongo.DESCENDING)])

# 查看索引
indexes = collection.index_information()
print(indexes)

聚合管道

# 按年龄分组统计
pipeline = [
    {"$group": {"_id": "$age", "count": {"$sum": 1}}},
    {"$sort": {"count": -1}}
]
results = collection.aggregate(pipeline)
for result in results:
    print(f"年龄 {result['_id']}: {result['count']}人")

PyMongo最佳实践

  • 连接池管理:使用单例模式管理MongoClient实例
  • 错误处理:捕获PyMongo异常并进行适当处理
  • 批量操作:使用bulk_write()进行批量操作提高性能
  • 连接安全:生产环境使用TLS/SSL加密连接
  • 超时设置:合理设置连接超时和操作超时时间
  • 索引优化:为频繁查询的字段创建索引
  • 模式设计:根据查询模式设计文档结构

总结

PyMongo为Python开发者提供了操作MongoDB的强大工具集。通过本教程,您已经学习了:

  • PyMongo的安装与基本配置
  • 数据库连接与集合操作
  • 文档的增删改查(CRUD)操作
  • 索引管理与查询优化
  • 聚合管道的使用
  • 生产环境最佳实践

继续深入学习MongoDB的文档模型、分片集群和复制集等内容,将使您能够更好地利用MongoDB的强大功能。

发表评论