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

目录

一、理论

1.PyMongo模块

2.Mongo Shell

二、实验

1. Windows11安装MongoDB 7.0.4

2.Windows11安装MongoDB Shell 2.1.0

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

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

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

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

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

三、问题

1.pip安装报错

2.PyCharm如何添加MongoDB插件


一、理论

1.PyMongo模块

(1)概念

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

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)选择版本

Python开发运维:PyMongo 连接操作 MongoDB_第1张图片

(3)next下一步

Python开发运维:PyMongo 连接操作 MongoDB_第2张图片

(4)next下一步

Python开发运维:PyMongo 连接操作 MongoDB_第3张图片

(5)这一步选择Custom

Python开发运维:PyMongo 连接操作 MongoDB_第4张图片

(6)OK

Python开发运维:PyMongo 连接操作 MongoDB_第5张图片

(7)next下一步

Python开发运维:PyMongo 连接操作 MongoDB_第6张图片

(8)next下一步

Python开发运维:PyMongo 连接操作 MongoDB_第7张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第8张图片

(10)Install安装

Python开发运维:PyMongo 连接操作 MongoDB_第9张图片

(11)Finish完成

Python开发运维:PyMongo 连接操作 MongoDB_第10张图片

(12) 服务已自启动

Python开发运维:PyMongo 连接操作 MongoDB_第11张图片

(13)查看默认配置文件

Python开发运维:PyMongo 连接操作 MongoDB_第12张图片

(14)软件目录

Python开发运维:PyMongo 连接操作 MongoDB_第13张图片

2.Windows11安装MongoDB Shell 2.1.0

(1)下载

Try MongoDB Tools - Download Free Here | MongoDB

(2)选择版本

Python开发运维:PyMongo 连接操作 MongoDB_第14张图片

(3)软件目录

Python开发运维:PyMongo 连接操作 MongoDB_第15张图片

(4)进入bin目录

Python开发运维:PyMongo 连接操作 MongoDB_第16张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第17张图片

(4)创建数据库

Python开发运维:PyMongo 连接操作 MongoDB_第18张图片

(5)批量插入数据

Python开发运维:PyMongo 连接操作 MongoDB_第19张图片

(6)完成数据导入

Python开发运维:PyMongo 连接操作 MongoDB_第20张图片

(7)navicat查看数据

Python开发运维:PyMongo 连接操作 MongoDB_第21张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第22张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第23张图片

(10)navicat查看数据

Python开发运维:PyMongo 连接操作 MongoDB_第24张图片

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

(1)安装PyMongo

Python开发运维:PyMongo 连接操作 MongoDB_第25张图片

(2)数据库连接

# -*- 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)

① 运行

Python开发运维:PyMongo 连接操作 MongoDB_第26张图片

② 输出字典结构.

Python开发运维:PyMongo 连接操作 MongoDB_第27张图片

③运行

Python开发运维:PyMongo 连接操作 MongoDB_第28张图片

④拿到游标

Python开发运维:PyMongo 连接操作 MongoDB_第29张图片

⑤ 运行

Python开发运维:PyMongo 连接操作 MongoDB_第30张图片

⑥输出100条数据

Python开发运维:PyMongo 连接操作 MongoDB_第31张图片

⑦ navicat查看mongodb集合数据

Python开发运维:PyMongo 连接操作 MongoDB_第32张图片

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

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

# -*- 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)

① 密码连接成功

Python开发运维:PyMongo 连接操作 MongoDB_第33张图片
 

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

# -*- 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)

 ① 密码连接

Python开发运维:PyMongo 连接操作 MongoDB_第34张图片

②查询数据

Python开发运维:PyMongo 连接操作 MongoDB_第35张图片

③ 成功

Python开发运维:PyMongo 连接操作 MongoDB_第36张图片

④ 成功

Python开发运维:PyMongo 连接操作 MongoDB_第37张图片

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

(1)数据库管理

# -*- 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)新建数据库

Python开发运维:PyMongo 连接操作 MongoDB_第38张图片

(3)成功

Python开发运维:PyMongo 连接操作 MongoDB_第39张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第40张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第41张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第42张图片

(7)成功

c8a54830787a4ba99b8df2277d10d8f7.png


 

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

(1)集合管理

# -*- 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() )

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

Python开发运维:PyMongo 连接操作 MongoDB_第43张图片

② 成功

Python开发运维:PyMongo 连接操作 MongoDB_第44张图片

③ david库下新建orders表

Python开发运维:PyMongo 连接操作 MongoDB_第45张图片

④ 删除

Python开发运维:PyMongo 连接操作 MongoDB_第46张图片

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

(1)添加文档

# -*- 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)

① 添加一个文档

Python开发运维:PyMongo 连接操作 MongoDB_第47张图片

②成功

Python开发运维:PyMongo 连接操作 MongoDB_第48张图片

③ mongosh查看已插入.

Python开发运维:PyMongo 连接操作 MongoDB_第49张图片

④ 添加多个文档

Python开发运维:PyMongo 连接操作 MongoDB_第50张图片

⑤ 最后3个显示已插入

Python开发运维:PyMongo 连接操作 MongoDB_第51张图片

(2)删除文档

# -*- 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,准备删除Python开发运维:PyMongo 连接操作 MongoDB_第52张图片

② 运行删除代码

Python开发运维:PyMongo 连接操作 MongoDB_第53张图片

③ 已删除

Python开发运维:PyMongo 连接操作 MongoDB_第54张图片

④ mongosh查看

Python开发运维:PyMongo 连接操作 MongoDB_第55张图片

⑤ 插入4个xiaoming

Python开发运维:PyMongo 连接操作 MongoDB_第56张图片

⑥显示已插入

Python开发运维:PyMongo 连接操作 MongoDB_第57张图片

⑦ 删除多个文档

Python开发运维:PyMongo 连接操作 MongoDB_第58张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第59张图片

⑨ 已删除

Python开发运维:PyMongo 连接操作 MongoDB_第60张图片

⑩ navicat显示也已删除

Python开发运维:PyMongo 连接操作 MongoDB_第61张图片

(3)更新文档

# -*- 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岁

Python开发运维:PyMongo 连接操作 MongoDB_第62张图片

②修改数据

 Python开发运维:PyMongo 连接操作 MongoDB_第63张图片

③运行成功

Python开发运维:PyMongo 连接操作 MongoDB_第64张图片
 

④查看数据

Python开发运维:PyMongo 连接操作 MongoDB_第65张图片

⑤ xiaobai年龄为22岁

4248ad2cdd1845279bf81daed0152654.png

⑥有2人有手机号

Python开发运维:PyMongo 连接操作 MongoDB_第66张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第67张图片

⑧ 运行成功

Python开发运维:PyMongo 连接操作 MongoDB_第68张图片

(4)查询文档

# -*- 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)

①查看一个文档

Python开发运维:PyMongo 连接操作 MongoDB_第69张图片

②返回结果就是一个字典

Python开发运维:PyMongo 连接操作 MongoDB_第70张图片

③修改

Python开发运维:PyMongo 连接操作 MongoDB_第71张图片

④运行结果

Python开发运维:PyMongo 连接操作 MongoDB_第72张图片

⑤修改

Python开发运维:PyMongo 连接操作 MongoDB_第73张图片

⑥ child

Python开发运维:PyMongo 连接操作 MongoDB_第74张图片

⑦ 修改

Python开发运维:PyMongo 连接操作 MongoDB_第75张图片

⑧child的age

Python开发运维:PyMongo 连接操作 MongoDB_第76张图片

⑨修改

Python开发运维:PyMongo 连接操作 MongoDB_第77张图片

⑩查看所有文档

Python开发运维:PyMongo 连接操作 MongoDB_第78张图片

⑪投影查询

Python开发运维:PyMongo 连接操作 MongoDB_第79张图片

⑫已去掉id

Python开发运维:PyMongo 连接操作 MongoDB_第80张图片

⑬查看文档部分字段

Python开发运维:PyMongo 连接操作 MongoDB_第81张图片

⑭条件查询

Python开发运维:PyMongo 连接操作 MongoDB_第82张图片

⑮条件查询2

Python开发运维:PyMongo 连接操作 MongoDB_第83张图片

⑯比较运算符

Python开发运维:PyMongo 连接操作 MongoDB_第84张图片

⑰多个字段排序

Python开发运维:PyMongo 连接操作 MongoDB_第85张图片

⑱限制查询结果数量

Python开发运维:PyMongo 连接操作 MongoDB_第86张图片

⑲偏移、跳过

Python开发运维:PyMongo 连接操作 MongoDB_第87张图片

⑳偏移、跳过2

Python开发运维:PyMongo 连接操作 MongoDB_第88张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第89张图片

三、问题

1.pip安装报错

(1)报错

Python开发运维:PyMongo 连接操作 MongoDB_第90张图片

(2)原因分析

网络问题

(3)解决方法

修改下载源

pip install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

Python开发运维:PyMongo 连接操作 MongoDB_第91张图片

2.PyCharm如何添加MongoDB插件

(1)搜索插件

Python开发运维:PyMongo 连接操作 MongoDB_第92张图片

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

Python开发运维:PyMongo 连接操作 MongoDB_第93张图片

(3)测试成功

Python开发运维:PyMongo 连接操作 MongoDB_第94张图片

你可能感兴趣的:(python开发运维,python,数据库,运维,运维开发,mongodb)