PyMongo 入门教程:Python 操作 MongoDB 完全指南

PyMongo 入门教程:Python 操作 MongoDB 完全指南

mongo-python-driver PyMongo - the Official MongoDB Python driver mongo-python-driver 项目地址: https://gitcode.com/gh_mirrors/mo/mongo-python-driver

前言

MongoDB 是一个流行的 NoSQL 数据库,而 PyMongo 是 MongoDB 官方提供的 Python 驱动程序。本教程将带你从零开始学习如何使用 PyMongo 进行 MongoDB 数据库操作,包括连接数据库、插入文档、查询数据等核心功能。

环境准备

在开始之前,请确保你已经:

  1. 安装了 Python(推荐 3.6+ 版本)
  2. 通过 pip 安装了 PyMongo 包:pip install pymongo
  3. 安装并运行了 MongoDB 服务(默认端口 27017)

验证安装是否成功:

import pymongo  # 如果没有报错说明安装成功

连接 MongoDB

使用 PyMongo 的第一步是建立与 MongoDB 的连接:

from pymongo import MongoClient

# 最简单的连接方式(使用默认主机和端口)
client = MongoClient()

# 也可以显式指定主机和端口
client = MongoClient('localhost', 27017)

# 或者使用 MongoDB URI 格式
client = MongoClient('mongodb://localhost:27017/')

数据库操作

MongoDB 的一个实例可以包含多个数据库。在 PyMongo 中访问数据库有两种方式:

# 属性式访问(适用于名称符合 Python 变量命名规则的数据库)
db = client.test_database

# 字典式访问(适用于所有数据库名称)
db = client['test-database']

注意:MongoDB 的数据库和集合是"惰性创建"的,只有在第一次插入数据时才会真正创建。

集合操作

集合(Collection)相当于关系型数据库中的表,用于存储文档:

# 属性式访问集合
collection = db.test_collection

# 字典式访问集合
collection = db['test-collection']

文档操作

MongoDB 使用 JSON 风格的文档存储数据,在 Python 中我们用字典来表示:

import datetime

post = {
    "author": "Mike",
    "text": "My first blog post!",
    "tags": ["mongodb", "python", "pymongo"],
    "date": datetime.datetime.now(tz=datetime.timezone.utc)
}

PyMongo 会自动将 Python 类型(如 datetime)转换为 BSON 类型存储。

插入文档

# 插入单个文档
post_id = db.posts.insert_one(post).inserted_id
print(post_id)  # 输出类似 ObjectId('...')

每个文档都会自动获得一个唯一的 _id 字段,如果文档没有提供则会自动生成。

批量插入

new_posts = [
    {
        "author": "Mike",
        "text": "Another post!",
        "tags": ["bulk", "insert"],
        "date": datetime.datetime(2009, 11, 12, 11, 14)
    },
    {
        "author": "Eliot",
        "title": "MongoDB is fun",
        "text": "and pretty easy too!",
        "date": datetime.datetime(2009, 11, 10, 10, 45)
    }
]

result = db.posts.insert_many(new_posts)
print(result.inserted_ids)  # 输出两个 ObjectId

注意第二个文档的结构与其他不同,这展示了 MongoDB 的无模式特性。

查询文档

查询单个文档

import pprint

# 查询集合中的第一个文档
pprint.pprint(db.posts.find_one())

# 带条件查询
pprint.pprint(db.posts.find_one({"author": "Mike"}))

查询多个文档

# 查询所有文档
for post in db.posts.find():
    pprint.pprint(post)

# 带条件查询多个文档
for post in db.posts.find({"author": "Mike"}):
    pprint.pprint(post)

按 ObjectId 查询

# 假设我们已经有一个 post_id
post = db.posts.find_one({"_id": post_id})

# 注意:不能直接使用字符串形式的 ObjectId 查询
from bson.objectid import ObjectId
post_id_str = str(post_id)
post = db.posts.find_one({"_id": ObjectId(post_id_str)})  # 正确方式

高级查询

计数

# 统计集合中所有文档数量
db.posts.count_documents({})

# 统计满足条件的文档数量
db.posts.count_documents({"author": "Mike"})

范围查询

# 查询日期早于指定时间的文档,并按作者排序
d = datetime.datetime(2009, 11, 12, 12)
for post in db.posts.find({"date": {"$lt": d}}).sort("author"):
    pprint.pprint(post)

这里使用了 $lt 操作符表示"小于"。

索引操作

索引可以显著提高查询性能,还可以强制某些约束:

# 创建唯一索引
result = db.profiles.create_index([("user_id", pymongo.ASCENDING)], unique=True)

# 查看索引信息
print(sorted(list(db.profiles.index_information())))

尝试插入重复数据会抛出异常:

user_profiles = [
    {"user_id": 211, "name": "Luke"},
    {"user_id": 212, "name": "Ziltoid"}
]
db.profiles.insert_many(user_profiles)

# 这会抛出 DuplicateKeyError 异常
duplicate_profile = {"user_id": 212, "name": "Tommy"}
db.profiles.insert_one(duplicate_profile)

总结

本教程涵盖了 PyMongo 的基本操作,包括:

  • 连接 MongoDB
  • 数据库和集合操作
  • 文档的插入(单条和批量)
  • 各种查询方式
  • 索引创建和使用

掌握了这些基础知识后,你已经可以开始使用 Python 操作 MongoDB 数据库了。PyMongo 还提供了更多高级功能,如聚合管道、事务处理等,可以在掌握基础后进一步学习。

mongo-python-driver PyMongo - the Official MongoDB Python driver mongo-python-driver 项目地址: https://gitcode.com/gh_mirrors/mo/mongo-python-driver

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

廉珏俭Mercy

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值