zoukankan      html  css  js  c++  java
  • 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)
    """
    """
    - 我们通过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}},True)
    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)
    from bson import ObjectId
    # 把字符串转换成ObjectId对象进行查询
    res = mdb.user.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")})
    

    其他操作

    import pymongo
    
    client = pymongo.MongoClient(host='127.0.0.1',port=27017)
    
    mdb = client["post_info"]
    
    # 查询数据库中有多少条数据
    ret=mdb.post_info.find({}).count()
    print(ret)
    
    # 查询部落中指定的分类
    res = mdb.post_info.find_one({"cbdname":"开心乐园"})
    print(res)
  • 相关阅读:
    Samba 4.0 RC3 发布
    SymmetricDS 3.1.7 发布,数据同步和复制
    Express.js 3.0 发布,Node.js 的高性能封装
    GIFLIB 5.0.1 发布,C语言的GIF处理库
    jQuery UI 1.9.1 发布
    SVN Access Manager 0.5.5.14 发布 SVN 管理工具
    DynamicReports 3.0.3 发布 Java 报表工具
    HttpComponents HttpClient 4.2.2 GA 发布
    AppCan 2.0 正式发布,推移动应用云服务
    Ruby 2.0 的新功能已经冻结
  • 原文地址:https://www.cnblogs.com/songzhixue/p/11203561.html
Copyright © 2011-2022 走看看