想操作 MongoDB 数据库,用 Python 咋整?PyMongo 就是个好帮手。它就是 MongoDB 官方开发的 Python 驱动,能让咱们用 Python 代码来操作 MongoDB 数据库。啥增删改查、索引管理、聚合查询,统统都能搞定。说白了,就是给 MongoDB 穿上了一件 Python 外套。
连接数据库先整起来
装库用这个命令:pip install pymongo。来看看咋连接数据库:
from pymongo import MongoClient
# 连接 MongoDB
client = MongoClient('mongodb://localhost:27017/')
# 选择数据库
db = client['my_database']
# 选择集合(就是表)
collection = db['my_collection']
温馨提示:要是连不上数据库,检查下 MongoDB 服务是不是启动了。要是要连云数据库,记得把连接串里的用户名密码改对喽。
增删改查都不难
MongoDB 最基本的操作就是 CRUD(增删改查),来看看咋用:
# 插入一条数据
data = {"name": "张三", "age": 25, "hobby": ["足球", "篮球"]}
result = collection.insert_one(data)
print(f"插入的 ID: {result.inserted_id}")
# 查找数据
query = {"name": "张三"}
doc = collection.find_one(query)
print(doc)
# 更新数据
new_values = {"$set": {"age": 26}}
collection.update_one(query, new_values)
# 删除数据
collection.delete_one(query)
这代码看着挺多,其实就是把数据当字典用,该咋整就咋整。
批量操作更给力
一条条处理太慢了,来点批量操作:
# 批量插入
docs = [
{"name": "张三", "age": 25},
{"name": "李四", "age": 30},
{"name": "王五", "age": 35}
]
result = collection.insert_many(docs)
# 批量查询
cursor = collection.find({"age": {"$gt": 25}})
for doc in cursor:
print(doc)
# 批量更新
collection.update_many(
{"age": {"$lt": 30}}, # 条件:年龄小于 30
{"$inc": {"age": 1}} # 年龄加 1
)
温馨提示:批量操作要注意内存占用,数据太多的话最好分批处理。cursor 用完记得关闭,不然可能会内存泄露。
聚合查询有点东西
想统计下数据?聚合管道就是干这个的:
pipeline = [
# 筛选年龄大于 25 的
{"$match": {"age": {"$gt": 25}}},
# 按年龄分组,计算每个年龄的人数
{"$group": {
"_id": "$age",
"count": {"$sum": 1},
"names": {"$push": "$name"}
}},
# 排个序
{"$sort": {"_id": 1}}
]
results = list(collection.aggregate(pipeline))
聚合管道看着吓人,其实就是一个个操作连起来,数据从一个管道流到另一个管道,每个管道都会对数据做点处理。
玩 PyMongo 有几个坑得注意:
1. ObjectId 不能直接转成字符串,得用 str()转换
2. 时间字段要用 datetime 类型,不能用字符串
3. 查询结果是 cursor 对象,遍历完就没了,要想重复用得转成列表
4. 索引得提前建好,不然查询可慢死了
对了,还有个小技巧:要是想看 MongoDB 生成的原生查询语句,可以用 explain()方法:
collection.find({"age": {"$gt": 25}}).explain()
这样就能知道 MongoDB 咋执行你的查询的,优化查询的时候特别有用。写查询的时候记得先用这个看看执行计划,免得写出特别慢的查询来。