学习如何使用 Python 连接 MongoDB: PyMongo 安装和基础操作教程

Python 可以用于数据库应用程序。最流行的 NoSQL 数据库之一是 MongoDB

MongoDB

MongoDB 将数据存储在类似 JSON 的文档中,使数据库非常灵活和可扩展。

您可以在 MongoDB 官网 上下载免费的 MongoDB 数据库

PyMongo

Python 需要一个 MongoDB 驱动程序来访问 MongoDB 数据库。我将使用 MongoDB 驱动程序 PyMongo

建议您使用 PIP 来安装 PyMongoPIP 很可能已经安装在您的 Python 环境中。将命令行导航到 PIP 的位置,然后键入以下内容:

bash 复制代码
python -m pip install pymongo

现在您已经下载并安装了一个 MongoDB 驱动程序。

测试 PyMongo

为了测试安装是否成功,或者如果您已经安装了 pymongo,请创建一个包含以下内容的 Python 页面:

demo_mongodb_test.py

python 复制代码
import pymongo

创建数据库

要在 MongoDB 中创建数据库,首先创建一个 MongoClient 对象,然后指定一个带有正确 IP 地址和要创建的数据库名称的连接 URL。如果数据库不存在,MongoDB 将创建该数据库并与之建立连接。

示例

创建名为 mydatabase 的数据库:

python 复制代码
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")

mydb = myclient["mydatabase"]

重要提示: 在 MongoDB 中,数据库在获得内容之前是不会被创建的!MongoDB 会等到您创建了至少一个文档(记录)的集合(表),然后才实际创建数据库(和集合)。

检查数据库是否存在

请记住:在 MongoDB 中,数据库在获得内容之前是不会被创建的

您可以通过列出系统中的所有数据库来检查数据库是否存在:

示例

返回系统数据库的列表:

python 复制代码
print(myclient.list_database_names())

或者您可以通过名称检查特定数据库:

示例

检查 mydatabase 是否存在:

python 复制代码
dblist = myclient.list_database_names()
if "mydatabase" in dblist:
  print("The database exists.")

创建集合

要在 MongoDB 中创建集合,请使用数据库对象并指定要创建的集合的名称。如果集合不存在,MongoDB 将创建该集合。

示例

创建名为"customers"的集合:

python 复制代码
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]

mycol = mydb["customers"]

重要提示: 在 MongoDB 中,集合在获得内容之前是不会被创建的!MongoDB 会等到您插入了一个文档后,才实际创建集合。

检查集合是否存在

请记住:在 MongoDB 中,集合在获得内容之前是不会被创建的。因此,如果这是您第一次创建集合

您可以通过列出所有集合来检查数据库中是否存在集合:

示例

返回数据库中所有集合的列表:

python 复制代码
print(mydb.list_collection_names())

或者您可以按名称检查特定集合:

示例

检查"customers"集合是否存在:

python 复制代码
collist = mydb.list_collection_names()
if "customers" in collist:
  print("The collection exists.")

插入集合

要将记录(在 MongoDB 中称为文档)插入集合,我们使用 insert_one() 方法。insert_one() 方法的第一个参数是一个包含文档中每个字段的名称和值的字典。

示例

在"customers"集合中插入一条记录:

python 复制代码
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mydict = { "name": "John", "address": "Highway 37" }

x = mycol.insert_one(mydict)

返回 _id 字段

insert_one() 方法返回一个 InsertOneResult 对象,该对象有一个属性 inserted_id,该属性保存插入文档的 id。

示例

在"customers"集合中插入另一条记录,并返回 _id 字段的值:

python 复制代码
mydict = { "name": "Peter", "address": "Lowstreet 27" }

x = mycol.insert_one(mydict)

print(x.inserted_id)

如果您未指定 _id 字段,MongoDB 将为您添加一个并为每个文档分配唯一的 id。在上面的示例中,未指定 _id 字段,因此 MongoDB 为记录(文档)分配了唯一的 _id。

插入多个文档

要在 MongoDB 的集合中插入多个文档,我们使用 insert_many() 方法。insert_many() 方法的第一个参数是包含要插入数据的字典的列表。

示例

python 复制代码
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mylist = [
  { "name": "Amy", "address": "Apple st 652"},
  { "name": "Hannah", "address": "Mountain 21"},
  { "name": "Michael", "address": "Valley 345"},
  { "name": "Sandy", "address": "Ocean blvd 2"},
  { "name": "Betty", "address": "Green Grass 1"},
  { "name": "Richard", "address": "Sky st 331"},
  { "name": "Susan", "address": "One way 98"},
  { "name": "Vicky", "address": "Yellow Garden 2"},
  { "name": "Ben", "address": "Park Lane 38"},
  { "name": "William", "address": "Central st 954"},
  { "name": "Chuck", "address": "Main Road 989"},
  { "name": "Viola", "address": "Sideway 1633"}
]

x = mycol.insert_many(mylist)

#

 打印插入文档的 _id 值的列表:
print(x.inserted_ids)

insert_many() 方法返回一个 InsertManyResult 对象,该对象有一个属性 inserted_ids,该属性保存插入文档的 id。

插入多个文档,指定ID

如果您不希望 MongoDB 为您的文档分配唯一的 id,可以在插入文档时指定 _id 字段。请记住,值必须是唯一的。两个文档不能具有相同的 _id。

示例

python 复制代码
import pymongo

myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["mydatabase"]
mycol = mydb["customers"]

mylist = [
  { "_id": 1, "name": "John", "address": "Highway 37"},
  { "_id": 2, "name": "Peter", "address": "Lowstreet 27"},
  { "_id": 3, "name": "Amy", "address": "Apple st 652"},
  { "_id": 4, "name": "Hannah", "address": "Mountain 21"},
  { "_id": 5, "name": "Michael", "address": "Valley 345"},
  { "_id": 6, "name": "Sandy", "address": "Ocean blvd 2"},
  { "_id": 7, "name": "Betty", "address": "Green Grass 1"},
  { "_id": 8, "name": "Richard", "address": "Sky st 331"},
  { "_id": 9, "name": "Susan", "address": "One way 98"},
  { "_id": 10, "name": "Vicky", "address": "Yellow Garden 2"},
  { "_id": 11, "name": "Ben", "address": "Park Lane 38"},
  { "_id": 12, "name": "William", "address": "Central st 954"},
  { "_id": 13, "name": "Chuck", "address": "Main Road 989"},
  { "_id": 14, "name": "Viola", "address": "Sideway 1633"}
]

x = mycol.insert_many(mylist)

# 打印插入文档的 _id 值的列表:
print(x.inserted_ids)

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

相关推荐
子兮曰2 天前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰2 天前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
默_笙2 天前
🍙 给每个请求过安检:FastAPI 是怎么把校验写进类型注解的
python
爱勇宝2 天前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
qq_426003962 天前
启动playwright录制codegen生成自动化测试脚本
python·自动化
虎头金猫2 天前
4K 视频总卡在公网带宽?用 N1 + OpenList 把网盘播放链路重新理顺
运维·服务器·网络·python·容器·beautifulsoup·pandas
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
长沙三为智能科技2 天前
家政小程序开发从0到上线:五阶段交付流程与验收清单
python
伞伞悦读2 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
大勇前进2 天前
原生 PHP 还是 Laravel?小项目到底要不要上框架
后端