zoukankan      html  css  js  c++  java
  • 【mongodb】python操作mongodb

    MongoDB-python操作mongodb

     

    安装

    pip install pymongo

    连接mongodb

    复制代码
    from pymongo import MongoClient
    
    my_client = MongoClient("127.0.0.1",27017)
    
    mdb = my_client["stutent"]   # 指定连接的库名
    print(mdb)
    
    
    # Database(MongoClient(host=['127.0.0.1:27017'], document_class=dict, tz_aware=False, connect=True), 'stutent')
    
    # connect=True 表示连接成功
    # document_class=dict 查询结果以字典的形式返回
    复制代码

    数据的增删改查

    添加

    复制代码
    # 添加单条数据
    res = mdb.user.insert_one({"name":"boy"})
    print(res.inserted_id)  # 不是字符串
    print(type(res.inserted_id))  # <class 'bson.objectid.ObjectId'>
    
    # 添加多条数据
    res = mdb.stutent.insert_many([{"name":"小胡"},{"name":"小花"}])
    print(res.inserted_ids)  # [ObjectId('5d2f247ee6390ef6741370a7'), ObjectId('5d2f247ee6390ef6741370a8')]
    print(type(res.inserted_ids)) # <class 'list'>
    复制代码

    查看

    查找符合条件的第一条数据

    res = mdb.stutent.find_one({"name":"小黑"})
    res = mdb.stutent.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})

    查找所有数据

    res = mdb.stutent.find({})   # 返回的是可迭代对象
    print(list(res))
    """
    for i in res:
        print(i)
    """
    1
    2
    3
    4
    5
    6
    """
    - 我们通过find查询到了所有数据
    - 如果前端页面需要用json数据进行渲染页面
    - 但_id并不是字符串类型而是ObjectId类型,且无法直接转换成json
    - 那么我们可以通过下面这两种方式将ObjectID转换成json
    """

    第一种方式,效率不高

    复制代码
    import json
    res_list = []
    for user in res:
        # 将列表中的_id值转换成字符串
        user["_id"] = str(user.get("_id"))
        res_list.append(user)
    # 将列表序列化
    ret = json.dumps(res_list)
    print(ret)
    复制代码

    第二种方式,效率高

    res = list(mdb.stutent.find({})) # 返回的是可迭代对象
    import json
    for index,user in enumerate(res):
        res[index]["_id"] = str(user.get("_id"))
    ret = json.dumps(res)
    print(ret)

    修改

    # 修改符合条件所有数据的第一条
    res = mdb.stutent.update_one({"name":"小花"},{"$set":{"name":"小二b"}})
    
    # 修改符合条件的所有数据,没有就添加一条
    res = mdb.stutent.update_many({"name":"小花"},{"$set":{"name":"小二b","age":80}})
    print(res) # {'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}

    批量操作

    s = {"name":{"$regex":"胡"}}   # 模糊匹配修改器
    data = {
        "$set":{"sex":"man","hobby":["抽烟","喝酒"]}
    }
    mdb.stutent.update_many(s,data)

    用字典的方法对数据库中的数据进行修改

    复制代码
    # 返回所以数据中符合条件的第一条数据,并且是dict格式
    res = mdb.stutent.find_one({"name":"小胡"})
    # {'_id': ObjectId('5d2f246d7fb0bb7a411f350c'), 'name': '小胡', 'sex': 'man', 'hobby': ['抽烟', '喝酒']}
    print(res)
    
    res["sex"] = "male"   # 在内存级别修改dict中的数据,所有字典的方法都可以使用
    # 在通过update方法更新到数据库
    mdb.stutent.update_one({"name":"小胡"},{"$set":{"sex":res.get("sex")}})
    # { "_id" : ObjectId("5d2f246d7fb0bb7a411f350c"), "name" : "小胡", "sex" : "male", "hobby" : [ "抽烟", "喝酒" ] }
    复制代码

    删除

    复制代码
    # 只删除符合条件的第一条数据
    res = mdb.stutent.delete_one({"name":"大呲花"})
    # 返回删除数据的数量
    print(res.deleted_count)
    
    # 删除符合条件的所有数据
    res = mdb.stutent.delete_many({"name":"小二b"})
    print(res.deleted_count)
    复制代码

    其他操作

    复制代码
    import pymongo
    """
    DESCENDING 从大到小排序
    ASCENDING  从小到大排序
    """
    # 返回的是可迭代对象
    # sort排序
    res = mdb.stutent.find().sort("age",pymongo.ASCENDING)
    for i in res:
        print(i)
    
    # 选取
    mdb.stu.find().limit(2)
    # 跳过
    mdb.stu.find().skip(2)
    
    # 分页
    res = list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4))
    print(res)
    复制代码
    1
    2
    3
    from bson import ObjectId
    # 把字符串转换成ObjectId对象进行查询
    res = mdb.user.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})
  • 相关阅读:
    简单探讨spring整合mybatis时sqlSession不需要释放关闭的问题
    男人常做俯卧撑,谁还敢说不行!
    五大穴位
    实战c++中的vector系列--vector的一些异常
    [Canvas画图] 藏图阁(16) 人体穴位
    算法题:剔除字符串(非常有意思)
    怎样在win8系统下建立wifi热点
    【code】flex_进度条样式
    使用bbed改动数据
    Go语言核心之美 3.2-slice切片
  • 原文地址:https://www.cnblogs.com/youxiu123/p/11493209.html
Copyright © 2011-2022 走看看