python 操作mongo数据库

PyMongo 的简单使用:

一、安装python包:

  • 进入python环境,输入命令:pip install pymongo

  • 源码安装:python setup.py

二、连接数据库:

  • 引入包pymongo:

    import pymongo
    
  • 连接到服务器,创建客户端

    // 明确指定主机和端口,进行连接
    client = pymongo.MongoClient('localhost' , 27017)
    // 也可以指定参数,进行连接
    client = pymongo.MongoClient(host='localhost', port=27017)
    
    //或使用MongoDB   URL格式进行连接
    client  = pymongo.MongoClient('mongodb://localhost:27017/')
    // 若Mongo数据库有用户名、密码时的连接
    client  = pymongo.MongoClient('mongodb://root:123456@localhost:27017/databaseName')
    // 设置用户名、密码、以及连接到哪个数据中的格式:
    uri = 'mongodb://' + user + ':' + pwd + '@' + server + ':' + port +'/'+ db_name
    // 举个栗子: 注意验证账号密码的时候,必须指定到admin的数据库
    client = pymongo.MongoClient('mongodb://root:123456@localhost:27017/admin') 
    
  • 获得数据库

    • MongoDB中一个实例能够支持多个独立的数据库,用点取属性的方式来获取数据库,或者通过字典的方式获取

      // 使用点取属性的方式获取数据库
      db = Client.course_database
      // 通过字典的方式获取数据库
      db = Client['course_database']
      
      • course_database是数据库的名字,随意起
  • 获取集合

    • 也是支持用点取属性的方式来获取数据库,或者通过字典的方式获取

      // 点属性方式获取集合
      collection = db.course_database
      // 通过字段的方式获取集合
      collection = db['course_database']
      

三、数据库的增删改查操作:

1.新增文档:
  • 新增一条文档db.集合名.insert_one({"key": "value"})

    db.course.insert_one({"name": "上海财经大学", "price": 998})
    
    // 到终端进行查找, 可以看到刚刚插入的数据
    > db.course.find();
    { "_id" : ObjectId("5ca07a75d04ac33bb0697237"), "price" : 998, "name" : "上海财经大学" }
    
  • 新增多条文档db.集合名.insert_many([{"key": "value"}, {"key": "value"}])

    db.course.insert_many(
        [
            {"name": "北京交通大学", "price": 1688}, {"name": "清华大学", "price": 1888}
        ]
    )
    
    // 到终端进行查找, 可以看到刚刚批量插入的数据
    > db.course.find();
    { "_id" : ObjectId("5ca07a75d04ac33bb0697237"), "price" : 998, "name" : "上海财经大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    
2.查询文档:
  • 查询一条文档db.集合名.find_one()

    data = db.course.find_one()
    print data
    {u'price': 998, u'_id': ObjectId('5ca07a75d04ac33bb0697237'), "name" : "上海财经大学"}
    // 查询一条数据时, 返回的是一个字典
    
  • 查询一条文档时,增加过滤条件db.集合名.find_one({"查询条件"})

    // 查询一条数据,并且课程价钱是1688元的
    data = db.course.find_one({"price": 1688})
    print data
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }  // 获取是一个字典
    
  • 查询多条文档db.集合名.find()

    data = db.course.find()
    print data
    <pymongo.cursor.Cursor object at 0x0000000003F71550>   
    // 查询多条数据时, 返回的是一个游标对象, 通过遍历游标获取所有数据
    for item in data:
    	print item
    // 获取到所有数据
    { "_id" : ObjectId("5ca07a75d04ac33bb0697237"), "price" : 998, "name" : "上海财经大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    
  • 查询多条文档时,增加过滤条件db.集合名.find({"查询条件"})

    // 查询所有课程价格时998元的
    data = db.course.find({"price": 998})
    print data
    <pymongo.cursor.Cursor object at 0x000000000418C588> // 返回的是一个游标对象
    // 查看返回的数据,需要遍历游标对象
    for item in data:
        print item
    { "_id" : ObjectId("5ca07a75d04ac33bb0697237"), "price" : 998, "name" : "上海财经大学" }
    
  • 通过ObjectId的字符串进行查询

    from bson.objectid import ObjectId
    // 先将字符串转换成对象
    data = db.course.find_one({'_id': ObjectId('5ca07b91d04ac325ec77ab66')})
    print data 
    //查询结果
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    
  • 查询运算符 indb.集合名.find({"查询字段": {"$in": ["值1", "值2"]}})

    // 首先看一下接下来要举例子中用到的数据
    > db.course.find().pretty()
    {
            "_id" : ObjectId("5ca07b91d04ac325ec77ab66"),
            "price" : 1888,
            "name" : "清华大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3e"),
            "课程专业" : [
                    "古建筑",
                    "软件工程"
            ],
            "price" : 888,
            "name" : "哈尔滨工业大学"
    }
    
    // 查询课程价格是666元或1888元
    data = db.course.find({"price": {"$in": [666, 1888]}})
    for item in data:
        print item
    // 查询结果
    {
            "_id" : ObjectId("5ca07b91d04ac325ec77ab66"),
            "price" : 1888,
            "name" : "清华大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    
  • 查询运算符ANDdb.集合名.find({"字段名":"值","字段名": {'$gt':"值1"}})

    // 查询课程名为"上海财经大学"并且课程价格大于500元,都有哪些课程
    data = db.course.find({"name":"上海财经大学", "price": {"$gt": 500}})
    print data
    for item in data:
        print item
    // 查询结果
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    
  • 查询运算符 ordb.集合名.find({"or": [{"字段名":"值"},{"字段名1":"值1"}]})

    // 查询课程名为"哈尔滨工业大学`或者课程价格大于1000元的课程
    data = db.course.find({"$or": [{"name": "哈尔滨工业大学"}, {"price": {"$gt": 1000}}]})
    for item in data:
        print item
    // 查询结果:
    {
            "_id" : ObjectId("5ca07b91d04ac325ec77ab66"),
            "price" : 1888,
            "name" : "清华大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3e"),
            "课程专业" : [
                    "古建筑",
                    "软件工程"
            ],
            "price" : 888,
            "name" : "哈尔滨工业大学"
    }
    
  • 查询整个数组(数组内容必须全部存在)db.集合名.find({"字段":["值","值1","值2"]})

    // 查询课程专业是"土木工程", "计算机", "建筑学"的课程是哪些
    data = db.course.find({"课程专业": ["土木工程", "计算机", "建筑学"]})
    for item in data:
        print item
    // 查询结果
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    
  • 查询整个数组(数组内容只需包含):db.集合名.find({"字段:{"$all":["值1", "值2"]})

    // 查询课程专业包含"计算机"或"土木工程"的都有哪些课程
    data = db.course.find({'课程专业': {"$all": ['计算机', '土木工程']}})
    for item in data:
        print item
    // 查询结果
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    
  • 查询数组某个元素db.集合名.find("字段名":"数组中的值")

    // 查询课程专业名是"古建筑"的课程都有哪些
    data = db.course.find({"课程专业": "古建筑"})
    for item in data:
        print item
    // 查询结果
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3e"),
            "课程专业" : [
                    "古建筑",
                    "软件工程"
            ],
            "price" : 888,
            "name" : "哈尔滨工业大学"
    }
    
  • 通过数组索引查询元素db.集合名.find({"字段名.索引": "数组内索引所对应的值"})

    // 查询课程专业第一个名为"土木工程"都有哪些课程
    data = db.course.find({"课程专业.0": "土木工程"})
    for item in data:
        print item
    // 查询结果:
    // 查询结果
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    
  • 查询字段存在的元素existsdb.集合名.find({"字段名":{"$exists":False| True}})

    // 查询有课程名的课程都有哪些
    data = db.course.find({"name": {"$exists": True}})
    for item in data:
        print item
    // 查询结果:
    {
            "_id" : ObjectId("5ca07b91d04ac325ec77ab66"),
            "price" : 1888,
            "name" : "清华大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3e"),
            "课程专业" : [
                    "古建筑",
                    "软件工程"
            ],
            "price" : 888,
            "name" : "哈尔滨工业大学"
    }
    
3.修改文档:
  • 修改一条文档db.集合名.update_one(filter={"查询条件"}, update= {"$set": {"修改目标"})

    // 查询上海财经大学,将该课程的价格更改成999元
    data = db.course.update_one(filter={"name": "上海财经大学"}, update={"$set": {"price": 999}})
    print data // <pymongo.results.UpdateResult object at 0x0000000004156C18>返回结果是一个对象
    
    // 可以看到上海财经大学课程价格更改成999元
    > db.course.find()
    { "_id" : ObjectId("5ca07a75d04ac33bb0697237"), "price" : 999, "name" : "上海财经大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    
  • 修改多条文档db.集合名.update_many(filter={"查询条件"}, update={"$set":{"修改目标"}})

    • 修改的字段存在就更新字段对应的值,若不存在就创建新的字段
    // 将课程价格大于100元的课程,添加字段desc,并且创建对应的值名
    data = db.course.update_many({'price': {"$gt": 100}}, {"$set": {"desc": "最好的考研平台!"}})
    
    
    // 查询结果: 可以看出来课程以前没有desc字段,使用批量更新的时候创建了desc的字段
    > db.course.find().pretty()
    {
            "_id" : ObjectId("5ca07b91d04ac325ec77ab66"),
            "price" : 1888,
            "name" : "清华大学",
            "desc" : "最好的考研平台!"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3d"),
            "课程专业" : [
                    "土木工程",
                    "计算机",
                    "建筑学"
            ],
            "price" : 666,
            "name" : "上海财经大学",
            "desc" : "最好的考研平台!"
    }
    {
            "_id" : ObjectId("5ca0903dd04ac32bc01ade3e"),
            "课程专业" : [
                    "古建筑",
                    "软件工程"
            ],
            "price" : 888,
            "name" : "哈尔滨工业大学",
            "desc" : "最好的考研平台!"
    }
    
4.删除文档:
  • 删除一条文档db.集合名.delete_one({})

    data = db.course.delete_one({})  // 条件写的是什么, 只删除一条数据
    print data
    <pymongo.results.DeleteResult object at 0x0000000003EF3CA8>  // 返回结果是一个对象
    
    // 可以看到将上海财经大学的文档已经删除
    > db.course.find()
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    
  • 删除多条文档db.集合名.delete_many({"过滤条件"})

    // 删除文档时注意过滤条件, 否则将集合中所有文档都删除
    // 删除课程价格为1688的文档
    data = db.course.delete_many({"price": 1688})  
    print data // <pymongo.results.DeleteResult object at 0x0000000003DB1CA8>返回结果是一个对象
    
    // 删除前,该集合中的数据
    > db.course.find() 
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab65"), "price" : 1688, "name" : "北京交通大学" }
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    { "_id" : ObjectId("5ca082d938bffb822439b7f3"), "name" : "哈尔滨工业大学", "price" : 1688 }
    // 删除后, 该集合中的数据
    > db.course.find() // 该课程中有两门课程时1688元, 所以删除多条文档后,只剩下了一条文档
    { "_id" : ObjectId("5ca07b91d04ac325ec77ab66"), "price" : 1888, "name" : "清华大学" }
    

四、运算符列表:

名称描述
$or逻辑或
$eq等于
$gt大于
$gte大于等于
$in在数组中
$lt小于
$lte小于等于
$ne不等于
$nin不在数组中
$elemMatch数组元素满足
$all数组包含元素
$slice数组切片
$type字段值类型检查
$exists字段是否存在判断
$set更新字段的值
$currentDate设定某字段的值为当前日期时间
$inc增加某字段的值
$push为数组字段添加新的元素
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值