PyMongo

8 篇文章 0 订阅

什么是PyMongo

PyMongo 是一个 Python 库,用于与 MongoDB 数据库进行交互。MongoDB 是一个基于文档的 NoSQL 数据库,提供高性能、可扩展性和灵活的架构。PyMongo 提供了一套工具,使得在 Python 程序中操作 MongoDB 变得简单和高效。

安装PyMongo

PyMongo地址:https://pypi.org/project/pymongo/

pip install pymongo

使用PyMongo

Mongodb语句学习请查看:Mongodb命令大全

连接Mongo

from pymongo import MongoClient

# 连接MongoDB服务器,无账号密码
# client = MongoClient('localhost', 27017)

# 连接MongoDB服务器,账号密码
uri = "mongodb://testuser:123456@localhost:27017/admin?authSource=admin"

# 连接到 MongoDB
client = MongoClient(uri)

# 检查连接
client.admin.command('ping')

选择数据库和集合

# 选择数据库
db = client['myDB']

# 选择集合
collection = db['myTable']

插入数据

# 插入一条数据  insert_one
document = {"name": "Tom", "age": 25, "city": "New York"}
result = collection.insert_one(document)
print(result.inserted_id)       # 返回插入id


# 插入多条数据  insert_many
documents = [
    {"name": "Jerry", "age": 30, "city": "San Francisco"},
    {"name": "Spike", "age": 35, "city": "Los Angeles"}
]
results = collection.insert_many(documents)
print(results.inserted_ids)     # 返回插入ids

查询数据

# 查询单个文档
result = collection.find_one({"name": "Tom"})
print(result)

# 查询多个文档
results = collection.find({"city": "New York"})
for document in results:
    print(document)

更新数据

# 更新单个文档
result = collection.update_one({"name": "Tom"}, {"$set": {"age": 25}})
print(result.modified_count)    # 返回更新影响行数

# 更新多个文档
results = collection.update_many({"city": "New York"}, {"$set": {"city": "NYC"}})
print(results.modified_count)   # 返回更新影响行数

删除数据

# 删除单个文档
result = collection.delete_one({"name": "Tom"})
print(result.deleted_count)     # 返回删除影响行数

# 删除多个文档
results = collection.delete_many({"city": "NYC"})
print(results.deleted_count)    # 返回删除影响行数

聚合操作

# 聚合管道
pipeline = [
    {"$match": {"city": "San Francisco"}},
    {"$group": {"_id": "$city", "average_age": {"$avg": "$age"}}}
]

# 执行聚合
results = collection.aggregate(pipeline)
for result in results:
    print(result)

索引操作

from pymongo import MongoClient, ASCENDING

# 连接MongoDB服务器,账号密码
uri = "mongodb://testuser:123456@localhost:27017/admin?authSource=admin"

# 连接到 MongoDB
client = MongoClient(uri)

# 检查连接
client.admin.command('ping')

# 选择数据库和集合
collection  = client['mydb']['users']

# 创建索引
collection.create_index([("name", ASCENDING)])

# 列出索引
indexes = collection.list_indexes()
for index in indexes:
    print(index)

# 删除索引
collection.drop_index([("name", ASCENDING)])

# 列出索引
indexes = collection.list_indexes()
for index in indexes:
    print(index)

GridFS 操作

初始化 GridFS
from pymongo import MongoClient
import gridfs
from bson.objectid import ObjectId

# 连接MongoDB服务器,账号密码
uri = "mongodb://testuser:123456@localhost:27017/admin?authSource=admin"

# 连接到 MongoDB
client = MongoClient(uri)

# 选择数据库
db = client['mydb']

# 初始化 GridFS
fs = gridfs.GridFS(db)
上传文件
# 上传文件
with open('D:\\aaa.mp4', 'rb') as file_data:
    file_id = fs.put(file_data, filename='abc.mp4', metadata={'filename': 'abc.mp4', 'description': '这是一段海景视频'})
    print(f"文件已上传 ID: {file_id}")

# 说明
# file_data:是一个文件对象,以二进制模式读取文件。
# filename:是存储在 GridFS 中的文件名。
# file_id:是 MongoDB 为文件生成的唯一 ID。
# metadata:是文件的额外说明数据
下载文件
# 通过文件名下载文件
file = fs.find_one({'filename': 'abc.mp4'})
if file:
    with open('aaa.mp4', 'wb') as f:
        f.write(file.read())
    print("文件下载成功.")

# ===========================================================

# 通过 _id 下载文件
file = fs.get(ObjectId("66bef8e9da532dd340bedef3"))
with open('abc.mp4', 'wb') as f:
    f.write(file.read())
print("文件下载成功.")
删除文件
# # 通过文件名删除文件
file = fs.find_one({'filename': 'abc.mp4'})
if file:
    fs.delete(file._id)
    print(f"文件 '{file.filename}' 已删除.")

# ===========================================================

# # 通过 _id 删除文件
file_id = ObjectId("66befd86476ec222f3b5b53f")
fs.delete(file_id)
print(f"文件 ID '{file_id}' 已删除.")
查询文件
# 查询所有文件
files = fs.find()
for file in files:
    print(f"文件名称 {file.filename}, 文件字节大小 {file.length}, 上传时间 {file.upload_date}, 元数据 {file.metadata}")

# ===========================================================

# 查询一个文件
file = fs.find_one({'filename': 'abc.mp4'})
if file:
    print(f"文件名称 {file.filename}, 文件字节大小 {file.length}, 上传时间 {file.upload_date}, 元数据 {file.metadata}")
更新文件

使用先删除文件,再上传文件进行更新文件操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

7 号

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

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

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

打赏作者

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

抵扣说明:

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

余额充值