上一篇
Python操作MongoDB数据库完整教程 - 从入门到实践
- Python
- 2025-07-30
- 722
Python操作MongoDB数据库教程
学习使用PyMongo库进行数据库连接、CRUD操作、索引管理等实用技巧
MongoDB与Python
MongoDB是一个流行的NoSQL数据库,以其灵活的文档结构和易扩展性著称。Python通过PyMongo库提供了操作MongoDB的能力。
为什么选择MongoDB?
- 灵活的文档结构(BSON格式)
- 强大的横向扩展能力
- 适合处理半结构化数据
- 丰富的查询语言
PyMongo核心功能
- 数据库连接与认证
- 文档CRUD操作
- 索引管理
- 聚合管道操作
- GridFS文件存储
安装PyMongo
使用pip安装PyMongo库:
pip install pymongo
安装完成后,可以导入库并验证版本:
import pymongo
print(pymongo.__version__)
# 输出类似: 4.3.3
连接MongoDB数据库
连接本地MongoDB实例:
from pymongo import MongoClient
# 连接到本地MongoDB实例,默认端口27017
client = MongoClient('mongodb://localhost:27017/')
# 列出所有数据库名称
print(client.list_database_names())
连接带认证的MongoDB服务器:
# 带用户名和密码的连接
client = MongoClient(
'mongodb://username:password@localhost:27017/'
)
# 或者使用字典形式
client = MongoClient(
host='localhost',
port=27017,
username='username',
password='password',
authSource='admin' # 认证数据库
)
基本CRUD操作
创建数据库和集合
# 选择或创建数据库(如果不存在会自动创建)
db = client['mydatabase']
# 选择或创建集合(类似SQL中的表)
collection = db['mycollection']
插入文档
# 插入单个文档
user = {
"name": "John Doe",
"email": "john@example.com",
"age": 30,
"interests": ["reading", "hiking", "coding"]
}
insert_result = collection.insert_one(user)
print(f"插入文档ID: {insert_result.inserted_id}")
# 插入多个文档
users = [
{"name": "Alice", "email": "alice@example.com", "age": 25},
{"name": "Bob", "email": "bob@example.com", "age": 35},
{"name": "Charlie", "email": "charlie@example.com", "age": 40}
]
insert_many_result = collection.insert_many(users)
print(f"插入文档IDs: {insert_many_result.inserted_ids}")
查询文档
# 查询所有文档
print("所有用户:")
for user in collection.find():
print(user)
# 条件查询
print("年龄大于30的用户:")
for user in collection.find({"age": {"$gt": 30}}):
print(user)
# 查询单个文档
john = collection.find_one({"name": "John Doe"})
print("查询John Doe:", john)
更新文档
# 更新单个文档
update_result = collection.update_one(
{"name": "John Doe"},
{"$set": {"age": 31}}
)
print(f"匹配数量: {update_result.matched_count}, 修改数量: {update_result.modified_count}")
# 更新多个文档
update_result = collection.update_many(
{"age": {"$lt": 30}},
{"$inc": {"age": 1}} # 年龄加1
)
print(f"匹配数量: {update_result.matched_count}, 修改数量: {update_result.modified_count}")
删除文档
# 删除单个文档
delete_result = collection.delete_one({"name": "Charlie"})
print(f"删除文档数量: {delete_result.deleted_count}")
# 删除多个文档
delete_result = collection.delete_many({"age": {"$gt": 40}})
print(f"删除文档数量: {delete_result.deleted_count}")
# 删除集合中所有文档(谨慎操作!)
# collection.delete_many({})
高级操作
索引管理
# 创建单字段索引
collection.create_index("email", unique=True)
# 创建复合索引
collection.create_index([("name", pymongo.ASCENDING), ("age", pymongo.DESCENDING)])
# 查看索引
indexes = collection.list_indexes()
for idx in indexes:
print(idx)
# 删除索引
collection.drop_index("email_1")
聚合管道
# 计算不同年龄的用户数量
pipeline = [
{"$group": {"_id": "$age", "count": {"$sum": 1}}},
{"$sort": {"_id": 1}}
]
age_groups = collection.aggregate(pipeline)
for group in age_groups:
print(f"年龄: {group['_id']}, 人数: {group['count']}")
最佳实践与注意事项
连接管理
使用上下文管理器确保连接关闭:
with MongoClient('mongodb://localhost:27017/') as client:
db = client['mydatabase']
# 执行数据库操作
# 连接自动关闭
性能优化
- 为常用查询字段创建索引
- 使用投影仅返回必要字段:
collection.find({}, {"_id": 0, "name": 1})
- 批量操作减少网络请求
- 避免在应用层处理大量数据
安全注意事项
- 不要将数据库凭据硬编码在代码中(使用环境变量)
- 生产环境开启认证和授权
- 使用TLS/SSL加密连接
- 遵循最小权限原则
总结
通过本教程,您已经学习了:
- 安装PyMongo并连接MongoDB数据库
- 执行基本CRUD(创建、读取、更新、删除)操作
- 管理索引以提高查询性能
- 使用聚合管道进行复杂数据处理
- 遵循MongoDB最佳实践和安全建议
MongoDB和Python的结合为现代应用开发提供了强大的数据存储和处理能力。继续探索PyMongo文档以了解更多高级功能!
本文由MingYan于2025-07-30发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://www.521pj.cn/20256828.html
发表评论