python与mongodb交互的核心是通过官方推荐的pymongo驱动库实现,该库提供了完整的接口来操作mongodb数据库,覆盖连接管理、数据读写、索引维护等全场景需求。开发者只需要完成库的安装、连接配置,就可以调用对应方法完成各类数据库操作。

环境准备
首先需要安装pymongo库,使用pip命令即可完成安装:
pip install pymongo
如果本地没有运行mongodb服务,需要先启动mongodb实例,默认端口为27017,也可以使用自定义端口启动服务。
建立数据库连接
使用pymongo的MongoClient类可以创建数据库连接,支持多种连接场景:
连接本地默认实例
from pymongo import MongoClient # 连接本地默认端口的mongodb实例 client = MongoClient() # 也可以显式指定地址和端口 client = MongoClient(host='localhost', port=27017)
连接远程实例或带认证实例
from pymongo import MongoClient
# 连接远程mongodb,假设地址为192.168.0.1,端口27017
client = MongoClient(host='192.168.0.1', port=27017)
# 带用户名密码的认证连接,假设数据库为admin,用户名为test_user,密码为test_pwd
client = MongoClient(
host='127.0.0.1',
port=27017,
username='test_user',
password='test_pwd',
authSource='admin'
)
选择数据库和集合
mongodb中数据库和集合是惰性创建的,只有在第一次写入数据时才会实际创建:
from pymongo import MongoClient client = MongoClient() # 选择名为test_db的数据库,不存在则后续写入时自动创建 db = client['test_db'] # 选择名为user_info的集合,不存在则后续写入时自动创建 collection = db['user_info']
文档增删改查操作
插入文档
支持单条插入和批量插入:
from pymongo import MongoClient
client = MongoClient()
db = client['test_db']
collection = db['user_info']
# 单条插入
single_user = {'name': '张三', 'age': 25, 'city': '北京'}
insert_result = collection.insert_one(single_user)
print(f'单条插入的文档ID:{insert_result.inserted_id}')
# 批量插入
user_list = [
{'name': '李四', 'age': 28, 'city': '上海'},
{'name': '王五', 'age': 22, 'city': '广州'}
]
insert_many_result = collection.insert_many(user_list)
print(f'批量插入的文档ID列表:{insert_many_result.inserted_ids}')
查询文档
支持条件查询、排序、限制返回数量等操作:
from pymongo import MongoClient
client = MongoClient()
db = client['test_db']
collection = db['user_info']
# 查询所有文档
all_users = collection.find()
for user in all_users:
print(user)
# 条件查询,查询年龄大于24的用户
adult_users = collection.find({'age': {'$gt': 24}})
for user in adult_users:
print(user)
# 查询单条文档,查询名字为张三的用户
zhangsan = collection.find_one({'name': '张三'})
print(zhangsan)
# 排序查询,按年龄降序排列,返回前2条
sorted_users = collection.find().sort('age', -1).limit(2)
for user in sorted_users:
print(user)
更新文档
支持单条更新和批量更新:
from pymongo import MongoClient
client = MongoClient()
db = client['test_db']
collection = db['user_info']
# 单条更新,将张三的城市改为深圳
update_result = collection.update_one(
{'name': '张三'},
{'$set': {'city': '深圳'}}
)
print(f'匹配到{update_result.matched_count}条,修改了{update_result.modified_count}条')
# 批量更新,将所有年龄小于25的用户的年龄加1
update_many_result = collection.update_many(
{'age': {'$lt': 25}},
{'$inc': {'age': 1}}
)
print(f'匹配到{update_many_result.matched_count}条,修改了{update_many_result.modified_count}条')
删除文档
支持单条删除和批量删除:
from pymongo import MongoClient
client = MongoClient()
db = client['test_db']
collection = db['user_info']
# 单条删除,删除名字为王五的文档
delete_result = collection.delete_one({'name': '王五'})
print(f'删除了{delete_result.deleted_count}条文档')
# 批量删除,删除年龄大于27的文档
delete_many_result = collection.delete_many({'age': {'$gt': 27}})
print(f'删除了{delete_many_result.deleted_count}条文档')
常见注意事项
- 连接使用完成后建议调用
client.close()关闭连接,释放资源 - 生产环境建议配置连接池参数,避免频繁创建连接消耗性能
- 查询条件中的操作符如
$gt、$set等需要严格按照mongodb的语法规则编写 - 对重要操作建议添加异常处理,捕获
pymongo.errors下的相关异常类型