Python开发运维:PyMongo 连接操作 MongoDB

目录

一、理论

1.PyMongo模块

[2.Mongo Shell](#2.Mongo Shell)

二、实验

[1. Windows11安装MongoDB 7.0.4](#1. Windows11安装MongoDB 7.0.4)

[2.Windows11安装MongoDB Shell 2.1.0](#2.Windows11安装MongoDB Shell 2.1.0)

[3.PyMongo 连接 MongoDB(无密码方式)](#3.PyMongo 连接 MongoDB(无密码方式))

[4.PyMongo 连接 MongoDB(有密码方式)](#4.PyMongo 连接 MongoDB(有密码方式))

[5.PyMongo 操作 MongoDB (数据库管理)](#5.PyMongo 操作 MongoDB (数据库管理))

[6.PyMongo 操作 MongoDB (集合管理)](#6.PyMongo 操作 MongoDB (集合管理))

[7.PyMongo 操作 MongoDB (文档管理)](#7.PyMongo 操作 MongoDB (文档管理))

三、问题

1.pip安装报错

2.PyCharm如何添加MongoDB插件


一、理论

1.PyMongo模块

(1)概念

在python当中,一般常用于开发中操作monoDB的模块有如下三个:

bash 复制代码
1)pymongo

2)mongoengine

3)moter
它是python中基于pymongo实现的异步操作库,类似于aiomysql,aiomysql也是python基于pymysql实现的异步库。

2.Mongo Shell

(1)概念

MongoShell是一个互动的JavaScript接口的MongoDB,可以使用MongoShell来查询和更新数据以及执行管理操作。

MongoShell是MongoDB发行版的一个组件, 安装并启动MongoDB后,将MongoShell连接到正在运行的MongoDB实例,MongoDB手册中的大多数示例使用 MongoShell,然而,许多驱动程序也提供了与MongoDB类似的接口。

二、实验

1. Windows11安装MongoDB 7.0.4

(1)下载

Download MongoDB Community Server | MongoDB

(2)选择版本

(3)next下一步

(4)next下一步

(5)这一步选择Custom

(6)OK

(7)next下一步

(8)next下一步

(9)这里取消Install MongoDB compass,next下一步

(10)Install安装

(11)Finish完成

(12) 服务已自启动

(13)查看默认配置文件

(14)软件目录

2.Windows11安装MongoDB Shell 2.1.0

(1)下载

Try MongoDB Tools - Download Free Here | MongoDB

(2)选择版本

(3)软件目录

(4)进入bin目录

(5)双击mongosh.exe进入命令行界面

(4)创建数据库

(5)批量插入数据

(6)完成数据导入

(7)navicat查看数据

(8)给Admin数据库创建账户管理员

(9)创建用户自己的数据库的角色

(10)navicat查看数据

3.PyMongo 连接 MongoDB(无密码方式)

(1)安装PyMongo

(2)数据库连接

bash 复制代码
# -*- coding: utf-8 -*-
import pymongo
if __name__ == '__main__':
    # 无密码连接mongoDB
    mongo = pymongo.MongoClient('localhost',27017)
    print(mongo)
    #切换数据库
    db = orders = mongo["demo"]
    #切换数据集
    orders = db["orders"]
    #print(orders.find())
    #查询100条数据
    for document in orders.find().limit(100):
        print(document)

① 运行

② 输出字典结构.

③运行

④拿到游标

⑤ 运行

⑥输出100条数据

⑦ navicat查看mongodb集合数据

4.PyMongo 连接 MongoDB(有密码方式)

(1)数据库连接(方式一)

bash 复制代码
# -*- coding: utf-8 -*-
import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 有密码连接mongoDB
    username = quote_plus("david")
    password = quote_plus("123456")
    # 获取数据库连接对象
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/david")
    print(mongo)
    # 获取数据库操作对象
    db = mongo["david"]
    print(db)
    #获取集合操作对象
    user_list = db["user_list"]
    # 获取数据
    for document in user_list.find():
        print(document)

① 密码连接成功

(2)数据库连接(方式二)

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    print(db)
    collection = db["user_list"]
    print(collection)

    for document in collection.find():
        print(document)

① 密码连接

②查询数据

③ 成功

④ 成功

5.PyMongo 操作 MongoDB (数据库管理)

(1)数据库管理

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    # 新建一个数据库
    orders = db["david"]["orders"]
    # document = {
    #     # "_id": ObjectId(),
    #     # "_id": 1,
    #     "name": "xiaozhao",
    #     "number": "00000001",
    # }
    # ret = orders.insert_one(document)
    # 查看数据库列表[只会列出有文档数据的数据库]
    print(mongo.list_database_names())
    # print(db["david"].list_indexes())      # 查看集合的索引
    # print(db.list_collection_names())     # 查看所有库下的所有集合
    # print(mongo["david"])

(2)新建数据库

(3)成功

(4)查看数据库列表(只会列出有文档数据的数据库)

(5)shop因为没有内容,所以没有被创建的

(6)查看所有库下的所有集合

(7)成功

6.PyMongo 操作 MongoDB (集合管理)

(1)集合管理

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)
    # 查看数据库列表[只会列出有文档数据的数据库]
    print(mongo.list_database_names())

    # 查看指定数据的集合列表[只会列出有文档数据的集合]
    print( db.list_collection_names() )

    # 获取指定名称对应的集合操作对象
    user_list = db["orders"]

    #给集合添加数据
    document = {
        "name": "xiaoli",
        "password": "123456"
    }
    user_list.insert_one(document)

    # 删除集合
    db["david.orders"].drop()

    # 查看指定数据的集合列表[只会列出有文档数据的集合]
    print( db.list_collection_names() )

① 查看指定数据的集合列表(只会列出有文档数据的集合)

② 成功

③ david库下新建orders表

④ 删除

7.PyMongo 操作 MongoDB (文档管理)

(1)添加文档

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
# from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]
    # # 添加一个文档
    # document = {"name": "xiaoming", "mobile": "130XXXXXXXX", "age": 16}
    # ret = user_list.insert_one(document)
    # print(ret.inserted_id)  # 返回InsertOneResult对象
    # 插入文档时,如果没有指定_id,将自动分配一个唯一的id。

    # 添加多个文档
    document_list = [
        {"name": "xiaoqian", "mobile": "136XXXXXXXX", "age": 17},
        {"name": "xiaosun", "mobile": "135XXXXXXXX", "age": 18},
        {"name": "xiaowei", "mobile": "139XXXXXXXX", "age": 18},
    ]
    ret = user_list.insert_many(document_list)

    # 打印文档_id值列表:
    print(ret.inserted_ids)

① 添加一个文档

②成功

③ mongosh查看已插入.

④ 添加多个文档

⑤ 最后3个显示已插入

(2)删除文档

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]


    # 删除一个文档
    # query1 = {"_id": ObjectId("656803f10a84aec77e378334")}
    # ret1 = user_list.delete_one(query1)
    # print(ret1)
    # print(ret1.deleted_count)
    #
    # query2 = {"name": "xiaoming"}
    # ret2 = user_list.delete_one(query2)
    # print(ret2)
    # print(ret2.deleted_count)

    # 删除多个文档
    query = {"name": "xiaoming"}
    ret = user_list.delete_many(query)
    print(ret)
    print(ret.deleted_count)    # 删除总数

    # 可以通过删除集合的方式,达到删除所有文档的效果
    # user_list.drop()

①查看最后一条数据id,准备删除

② 运行删除代码

③ 已删除

④ mongosh查看

⑤ 插入4个xiaoming

⑥显示已插入

⑦ 删除多个文档

⑧ 查看运行结果,删除了4个

⑨ 已删除

⑩ navicat显示也已删除

(3)更新文档

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    #db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]

    # #更新一条数据
    # query = {"name": "xiaobai"}
    # data = {"$set": {"age": 22}}
    # ret = user_list.update_one(query, data)
    # print(ret.modified_count)      #修改数量

    #更新所有文档
    query = {"mobile": {"$regex": "^13"}}
    data = {"$inc": {"age": 2}}
    ret = user_list.update_many(query, data)
    print(ret)
    print(ret.modified_count)

①查看当前xiaobai年龄为16岁

②修改数据

③运行成功

④查看数据

⑤ xiaobai年龄为22岁

⑥有2人有手机号

⑦ 13开头手机号年龄自增2

⑧ 运行成功

(4)查询文档

bash 复制代码
# -*- coding: utf-8 -*-

import pymongo
from  bson import ObjectId

if __name__ == '__main__':
    #有密码连接mongoDB
    mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
    db = mongo["david"]
    username = "david"
    password = "123456"
    # db.authenticate(username, password)

    #切换数据集
    user_list = db["user_list"]

    # 查看一个文档,返回结果就是一个字典
    # ret = user_list.find_one()
    # print(ret["name"])
    # print(ret["child"])
    # print(ret["child"]["age"])


    # 统计文档数量,返回结果就是整数
    # ret = user_list.count()
    # print(ret)

    # # 查看所有文档
    # for document in user_list.find():
    #     print(document)

    # # 投影查询,去掉id
    # for document in user_list.find({},{"_id":0}):
    #     print(document)

    # # 查看文档部分字段,find和find_one的第二个参数表示控制字段的显示隐藏,1为显示,0为隐藏
    # for document in user_list.find({}, {"_id": 0, "name": 1, "mobile": 1}):
    #     print(document)

    # # 条件查询
    # query = {"age": 20}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # # 比较运算符
    # query = {"age": {"$gt": 17}}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # query = {"age": {"$eq": 20}}
    # document_list = user_list.find(query)
    # for document in document_list:
    #     print(document)

    # # 多个字段排序:
    # #       sort([("键1",1),("键2",-1)])
    # document_list = user_list.find().sort("age")
    # for document in document_list:
    #     print(document)
    #
    # # 限制查询结果数量
    # document_list = user_list.find().limit(3)
    # for document in document_list:
    #     print(document)

    # # 偏移、跳过
    # #	skip(int)
    # document_list = user_list.find().limit(3).skip(3)  # 从第3篇文档开始获取3篇文档
    # for document in document_list:
    #     print(document)

    # # 自定义条件函数
    # document_list = user_list.find({"$where": "this.age==20"})
    # for document in document_list:
    #     print(document)

    document_list = user_list.find({"$where": "this.age>=18"}).sort("age",-1)
    for document in document_list:
        print(document)

①查看一个文档

②返回结果就是一个字典

③修改

④运行结果

⑤修改

⑥ child

⑦ 修改

⑧child的age

⑨修改

⑩查看所有文档

⑪投影查询

⑫已去掉id

⑬查看文档部分字段

⑭条件查询

⑮条件查询2

⑯比较运算符

⑰多个字段排序

⑱限制查询结果数量

⑲偏移、跳过

⑳偏移、跳过2

㉑定义条件函数,倒叙排序

三、问题

1.pip安装报错

(1)报错

(2)原因分析

网络问题

(3)解决方法

修改下载源

bash 复制代码
pip install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.PyCharm如何添加MongoDB插件

(1)搜索插件

(2)软件左下角进入插件

(3)测试成功

相关推荐
凡人的AI工具箱7 分钟前
15分钟学 Python 第38天 :Python 爬虫入门(四)
开发语言·人工智能·后端·爬虫·python
码农超哥同学18 分钟前
Python知识点:在Python编程中,如何使用Gensim进行主题建模
开发语言·python·面试·编程
skywalk816319 分钟前
install fcitx chinese input at FreeBSD14.1
运维·服务器·freebsd
奔跑吧邓邓子22 分钟前
JSON 全知全解:深入探索 JSON 的奥秘
开发语言·python·json
小羊在奋斗26 分钟前
【Linux】包管理器、vim详解及简单配置
linux·运维·vim
CS_素锦少年34 分钟前
Linux_kernel字符设备驱动12
linux·运维·服务器
theoxiong39 分钟前
深度解析:Tkinter 界面布局与优化技巧
python·ui·pyqt·tkinter
丶213640 分钟前
【SQL】深入理解SQL:从基础概念到常用命令
数据库·后端·sql
醉颜凉1 小时前
银河麒麟服务器操作系统中查询服务器主板型号
运维·操作系统·国产化·kylin os·银河麒麟桌面操作系统
技术卷1 小时前
Redis数据库与GO(一):安装,string,hash
数据库·redis·golang