PyMongo模块

在python当中,一般常用于开发中操作monoDB的模块无非三个:pymongo, mongoEngine, motor

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

mysql  pymysql  mysqlDB  aiomysql[基于pymysql实现的异步库]
redis  pyredis  redis    aioredis[基于pyredis实现的异步库]
mongo  pymongo  mongoengine[基于pymongo实现的ORM,高仿django的ORM]  motor[基于pymongo实现的异步库]

PyMongo

文档:https://www.mongodb.com/docs/drivers/python/

文档:https://pymongo.readthedocs.io/en/stable/api/index.html

安装:

pip install pymongo -i https://pypi.douban.com/simple

数据库连接

数据库连接,无密码

import pymongo

if __name__ == '__main__':
    # 无密码连接mongo[如果mongo没有开启用户访问控制机制的情况下,可以使用]
    mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017")
    ret = mongo.list_databases()

数据库连接,有密码

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 有密码连接[最主要的连接方式]
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    print(mongo.list_databases()) # 列出当前账户可操作的所有数据库

数据库管理

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # # 无密码连接mongo[如果mongo没有开启用户访问控制机制的情况下,可以使用]
    # mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017")
    # ret = mongo.list_databases()


    # 有密码连接
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    print(mongo.list_databases()) # 列出当前账户可操作的所有数据库
    # 切换操作的数据库
    db = mongo["test"]
    print(db)
    # 列出当前数据库下的所有集合
    print(db.list_collections())
    # 获取当前数据库下的指定集合操作对象
    users_collection = db["orders"]
    print(users_collection)
    # 统计当前集合下所有的文档数量
    count = users_collection.count_documents({})
    print(count)

集合管理

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # # 无密码连接mongo[如果mongo没有开启用户访问控制机制的情况下,可以使用]
    # mongo = pymongo.MongoClient("mongodb://127.0.0.1:27017")
    # ret = mongo.list_databases()


    # 有密码连接
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    print(mongo.list_databases()) # 列出当前账户可操作的所有数据库
    # 切换操作的数据库
    db = mongo["test"]
    print(db)
    print(db.list_collection_names())

    # 列出当前数据库下的所有集合
    print(db.list_collections())
    # 获取当前数据库下的指定集合操作对象
    users_collection = db["orders"]
    print(users_collection)
    # 统计当前集合下所有的文档数量
    count = users_collection.count_documents({})
    print(count)

    # 删除集合
    doc_collection = db["doc"]
    doc_collection.drop()

文档管理

添加文档

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 连接数据库
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    # 切换或新建数据库
    db = mongo["yingmingapp"]
    # 切换或新建数据集
    users = db["users"]

    # # 添加一个文档
    # document = {"name": "xiaoming", "mobile": "13012345678", "age": 16}
    # ret = users.insert_one(document)
    # print(ret.inserted_id)  # 返回新增文档的主键ID


    # 添加多个文档
    document_list = [
        {"name": "xiaoming", "mobile": "13033345678", "age": 17},
        {"name": "xiaohong", "mobile": "13044345678", "age": 18},
        {"name": "xiaohei", "mobile": "13612345678", "age": 18},
    ]
    ret = users.insert_many(document_list)
    print(ret.inserted_ids)  # 返回新增文档的主键ID列表

删除文档

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 连接数据库
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    # 切换或新建数据库
    db = mongo["yingmingapp"]
    # 切换或新建数据集
    users = db["users"]

    """删除文档"""
    # 删除一篇文档
    filter = {"name":"xiaoming"}
    ret = users.delete_one(filter)
    print(ret.deleted_count) # 返回删除文档的数量

    # 删除多篇文档
    filter = {"name": "xiaohong"}
    ret = users.delete_many(filter)
    print(ret.deleted_count) # 返回删除文档的数量

    # 按指定条件删除多个文档
    filter = {"age": {"$gte": 17}}  # age >= 17
    ret = users.delete_many(filter)
    print(ret.deleted_count)  # 返回删除文档的数量
    

更新文档

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 连接数据库
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    # 切换或新建数据库
    db = mongo["yingmingapp"]
    # 切换或新建数据集
    users = db["users"]

    """更新文档"""
    # # 更新一个文档
    # filter = {"name": "xiaoming"}
    # update = {"$set": {"name": "xiaohong"}, "$inc": {"age": -3}}
    # ret = users.update_one(filter=filter, update=update)
    # print(ret.modified_count)  # 返回更新文档的数量

    # # 更新多个文档
    # filter = {"name": "xiaohong"}
    # update = {"$set": {"sex": True}}
    # ret = users.update_many(filter=filter, update=update)
    # print(ret.modified_count)  # 返回更新文档的数量

    # 把满足条件的一个文档进行替换
    filter = {"name": "xiaoming"}
    replace = {"name": "xiaolan", "age": 16, "sex": False} # 因为是直接替换文档,所以不需要指定更新运算符
    ret = users.replace_one(filter, replace)
    print(ret.modified_count)  # 返回替换文档的数量

查询文档

import pymongo
from urllib.parse import quote_plus

if __name__ == '__main__':
    # 连接数据库
    username = quote_plus("root")
    password = quote_plus("123456")
    database = quote_plus("admin")
    mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/{database}")
    # 切换或新建数据库
    db = mongo["test"]
    # 切换或新建数据集
    users = db["users"]

    """添加文档"""
    # # 添加一个文档
    # document = {"name": "xiaoming", "mobile": "13012345678", "age": 16}
    # ret = users.insert_one(document)
    # print(ret.inserted_id)  # 返回新增文档的主键ID
    #
    #
    # # 添加多个文档
    # document_list = [
    #     {"name": "xiaoming", "mobile": "13033345678", "age": 17},
    #     {"name": "xiaohong", "mobile": "13044345678", "age": 18},
    #     {"name": "xiaohei", "mobile": "13612345678", "age": 18},
    # ]
    # ret = users.insert_many(document_list)
    # print(ret.inserted_ids)  # 返回新增文档的主键ID列表


    """删除文档"""
    # # 删除一篇文档
    # filter = {"name":"xiaoming"}
    # ret = users.delete_one(filter)
    # print(ret.deleted_count) # 返回删除文档的数量
    #
    # # 删除多篇文档
    # filter = {"name": "xiaohong"}
    # ret = users.delete_many(filter)
    # print(ret.deleted_count) # 返回删除文档的数量

    # # 按指定条件删除多个文档
    # filter = {"age": {"$gte": 17}}  # age >= 17
    # ret = users.delete_many(filter)
    # print(ret.deleted_count)  # 返回删除文档的数量


    """更新文档"""
    # # 更新一个文档
    # filter = {"name": "xiaoming"}
    # update = {"$set": {"name": "xiaohong"}, "$inc": {"age": -3}}
    # ret = users.update_one(filter=filter, update=update)
    # print(ret.modified_count)  # 返回更新文档的数量

    # # 更新多个文档
    # filter = {"name": "xiaohong"}
    # update = {"$set": {"sex": True}}
    # ret = users.update_many(filter=filter, update=update)
    # print(ret.modified_count)  # 返回更新文档的数量

    # # 把满足条件的一个文档进行替换
    # filter = {"name": "xiaoming"}
    # replace = {"name": "xiaolan", "age": 16, "sex": False} # 因为是直接替换文档,所以不需要指定更新运算符
    # ret = users.replace_one(filter, replace)
    # print(ret.modified_count)  # 返回替换文档的数量


    """查询文档"""
    # # 获取整个集合所有的文档数据
    # orders = db["orders"]
    # ducument_list = orders.find()
    # for document in ducument_list:
    #     print(document)

    # # 获取集合中第一个文档
    # orders = db["orders"]
    # document = orders.find_one()
    # print(document)
    # print(document.get("order_number"))  # 获取文档中的任意数据
    # print(document.get("items"))  # 获取文档中的任意数据
    # print(document["items"][0])  # 获取文档中的任意数据
    # print(document["items"][0]["price"])  # 获取文档中的任意数据

    # # 投影显示字段
    # document = users.find_one({}, {"_id": 0})
    # print(document)
    #
    # document = users.find_one({}, {"_id": 0, "name": 1, "age": 1})
    # print(document)


    # 按条件查询多条数据
    # filter = {"age": 18}
    # document_list = users.find(filter)
    # for document in document_list:
    #     print(document)

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


    # # 结果排序,单字段排序
    # filter = {"age": {"$lt": 32}}
    # #  pymongo.ASCENDING 就是 -1 ,表示升序, 从小到大
    # #  pymongo.DESCENDING 就是 1 ,表示降序, 从大到小
    # document_list = users.find(filter).sort("age", pymongo.DESCENDING)
    # print(list(document_list))

    # # 结果排序,多字段排序
    # filter = {"age": {"$lte": 34}}
    # order = [("age", pymongo.DESCENDING), ("_id", pymongo.ASCENDING)]
    # document_list = users.find(filter).sort(order)
    # print(list(document_list))


    # # 限制查询结果数量
    # document_list = users.find().limit(3)
    # print(list(document_list))

    # # 偏移、跳过
    # #	skip(int)
    # document_list = users.find().limit(3).skip(3)  # 从第3篇文档开始获取3篇文档
    # print(list(document_list))

    # # 自定义条件函数
    # document_list = users.find({"$where": "this.age==18"})
    # print(list(document_list))

    ret = db.command("buildinfo")
    print(ret)
posted @ 2019-03-24 11:32  silencio。  阅读(186)  评论(0)    收藏  举报