Python连接MondoDB教程

Python连接MondoDB教程

必须工作

  • 连接MongoDB,这里使用pymongo库。client = pymongo.MongoClient(host='localhost', port=27017)
  • 连接一个数据库,如果没有则会自动创建。db = client.demodb
  • 连接一个数据表,如果没有则会自动创建。info = db.info

  • 添加文本,使用 insert_ont()或者insert_many() 方法
    • 添加一组文本
      • 新建一组需要添加的数据,字典格式(JSON)
        data = {
            'name': 'MonkeyHJY',
            'height': '182CM',
            'weight': '90KG',
            'date': '2020/4/17 10:36'
        }
        
      • 执行添加语法 x = info.insert_one(data)
      • 注意:如果我们在插入值的时候没有指定 _id 的话,MongoDN会自动帮我们生成一个。
    • 添加多个文本
      • 新建一个包含多组数据的列表
          data = [
              {'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'},
              {'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'},
          ]
        
      • 执行添加语法: x = info.insert_many(data)
      • 注意:由于我们没有指定 _id ,所以依然会默认随机添加。
      • 获取多个添加的_id:print(x.inserted_ids)
    • 添加一个指定 _id 的文本
      • 新建一个包含 _id 的数据字典
        data = {
            '_id': 1,
            'name': 'MonkeyHJY',
            'height': '182CM',
            'weight': '90KG',
            'date': '2020/4/17 11:30'
        }
        
      • 执行插入语句与上面相同
      • 打印插入一条数据的 _idprint(x.inserted_id)
    • 插入指定 _id 的多个文本同理。不再赘述。

当前测试数据

{'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'}
{'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}
{'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
{'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'}
  • 查询数据,使用 find_one()或者find() 方法,返回一个包含数据的字典(JSON)数据
    • 不指定查询参数,则查询第一条数据
      • 代码:x = info.find_one()
      • 返回结果:

        {’_id’: ObjectId(‘5e9917083392ff666e2719bb’), ‘name’: ‘MonkeyHJY’, ‘height’: ‘182CM’, ‘weight’: ‘90KG’, ‘date’: ‘2020/4/17 10:36’}

    • 指定查询参数,则查询符合参数的第一个数据
      • 代码:x = info.find_one({'name': 'MonkeyHJY'})
      • 返回结果:

        {’_id’: ObjectId(‘5e9917083392ff666e2719bb’), ‘name’: ‘MonkeyHJY’, ‘height’: ‘182CM’, ‘weight’: ‘90KG’, ‘date’: ‘2020/4/17 10:36’}

  • 查询多条数据,使用 find() 方法,会返回一个包含查询数据的列表
    • 不指定查询参数,则返回所有数据
      • 代码:
        x = info.find()
        for i in x:
            print(i)
        
      • 返回结果
        {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'}  
        {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}  
        {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}  
        {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'} 
        
    • 指定查询参数,则返回符合参数的所有数据。不再进行演示

  • 修改数据,使用 update_one()或者update_many() 方法。本例使用数据与上例相同
    • 修改单个数据
      • 代码。(下面的代码将 nameLP 的数据的 height 字段修改为 180CM)
        print('='*5, '修改前的数据', '='*5)
        x = info.find_one({'name': 'LP'})
        print(x)
        
        info.update_one({'name': 'LP'}, {'$set': {'height': '180CM'}})
        print('='*5, '修改后的数据', '='*5)
        x = info.find_one({'name': 'LP'})
        print(x)
        
      • 打印结果
        ===== 修改前的数据 =====
        {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '175CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
        ===== 修改后的数据 =====
        {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
        
    • 修改多条数据
      • 代码(下面的代码将 name 字段中以 M 开头的数据的 weight 字段修改为 80KG)
        print('='*5, '修改前的数据', '='*5)
        x = info.find({'name': {'$regex': '^M'}})
        for i in x:
        print(i)
        
        info.update_many({'name': {'$regex': '^M'}}, {'$set': {'weight': '80KG'}})
        print('='*5, '修改后的数据', '='*5)
        x = info.find({'name': {'$regex': '^M'}})
        for i in x:
        print(i)
        
      • 打印结果
        ===== 修改前的数据 =====
        {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 10:36'}
        {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '90KG', 'date': '2020/4/17 11:30'}
        ===== 修改后的数据 =====
        {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'}
        {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 11:30'}
        

  • 删除集合。使用 drop() 方法
    • 代码: info.drop()
    • 返回值:删除成功则返回True
  • 删除文档
    • 删除单个文档。使用 delete_one() 方法
      • 代码:
        print('='*5, '删除前的数据', '='*5)
        x = info.find()
        for i in x:
            print(i)
        
        info.delete_one({'_id': 1})
        print('='*5, '删除前的数据', '='*5)
        x = info.find()
        for i in x:
            print(i)      
        
      • 打印结果
        ===== 删除前的数据 =====
        {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'}
        {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}
        {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}
        {'_id': 1, 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 11:30'}
        ===== 删除前的数据 =====
        {'_id': ObjectId('5e9917083392ff666e2719bb'), 'name': 'MonkeyHJY', 'height': '182CM', 'weight': '80KG', 'date': '2020/4/17 10:36'}
        {'_id': ObjectId('5e991efc62880d021c172e35'), 'name': 'HCL', 'height': '160CM', 'weight': '50KG', 'date': '2020/4/17 11:12'}
        {'_id': ObjectId('5e991efc62880d021c172e36'), 'name': 'LP', 'height': '180CM', 'weight': '60KG', 'date': '2020/4/17 11:20'}      
        
    • 删除多条数据使用方法 delete_many() ,其余大同小异,不再赘述。
    • 补充
      x = info.delete_many({...})
      print(x.deleted_count)
      
      上面的代码可以打印删除的数据的条数。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值