• pymongo的使用


    开始之前我们先创建数据库test,在test下面创建两个聚类:student_info和teacher_info,并写入数据

    import pymongo
    
    client = pymongo.MongoClient('localhost', 27017)
    test = client['test']
    student_info = test['student_info']
    teacher_info = test['teacher_info']
    
    
    
    student_infos = [{'name':'小明','age':12,'city':'广州','hobby':['足球','游戏']},
                     {'name':'小李','age':11,'city':'北京','hobby':['篮球']},
                     {'name':'小张','age':9,'city':'上海','hobby':['吃饭','睡觉','发呆']},
                     {'name':'小丽','age':12,'city':'苏州','hobby':['音乐']},
                     {'name':'小红','age':8,'city':'南京','hobby':['读书']}]
    
    for i in student_infos:
        student_info.insert_one({'name':i['name'],'city':i['city'],'age':i['age'],'hobby':i['hobby']})
    
    
    
    teacher_infos = [{'name':'张老师','age':23,'city':'广州','subject':'语文'},
                     {'name':'王老师','age':35,'city':'深圳','subject':'英语'},
                     {'name':'李老师','age':45,'city':'哈尔滨','subject':'数学'},
                     {'name':'陈老师','age':38,'city':'苏州','subject':'物理'},
                     {'name':'黄老师','age':28,'city':'兰州','subject':'体育'}]
    
    for i in teacher_infos:
        teacher_info.insert_one({'name':i['name'],'city':i['city'],'age':i['age'],'subject':i['subject']})

    这样我们得到了一个包含两个聚类的数据库test,两个聚类如下:

    1.链接数据库和聚类

    # 连接MongoDB
    client = pymongo.MongoClient('localhost', 27017)
    
    # 连接数据库test
    test = client['test']
    # 也可写成这种形式
    test = client.test

    2.查看全部聚集名称(collection_names)

    # 查看数据库test中全部聚集名称
    print(test.collection_names())

    结果:

    ['system.indexes', 'student_info', 'teacher_info']

    3.查看聚集的一条记录(find_one)

    # 查看聚集student_info中的一条记录
    print(test.student_info.find_one())

    结果:

    {'hobby': ['足球', '游戏'], '_id': ObjectId('571c522513d59412f4cbf78c'), 'name': '小明', 'age': 12, 'city': '广州'}
    # 查看聚类中'age'字段为12的一条记录(如有多条只显示第一条)
    print(test.student_info.find_one({'age':12}))

    结果:

    {'age': 12, 'hobby': ['足球', '游戏'], 'name': '小明', 'city': '广州', '_id': ObjectId('571c522513d59412f4cbf78c')}

    4.查看聚集的字段(find_one)

    # 前一个字典为查询条件,后一个字典为展示的字段
    # 不写查询条件返回全部记录
    for i in test.student_info.find({},{"name":1}):
        print(i)

    结果:

    {'name': '小明', '_id': ObjectId('571c9aae13d59423b8bef633')}
    {'name': '小李', '_id': ObjectId('571c9aae13d59423b8bef634')}
    {'name': '小张', '_id': ObjectId('571c9aae13d59423b8bef635')}
    {'name': '小丽', '_id': ObjectId('571c9aae13d59423b8bef636')}
    {'name': '小红', '_id': ObjectId('571c9aae13d59423b8bef637')}
    # 因为默认会返回'_id'字段,不要显示'_id'字段时可以这样写:
    for i in test.student_info.find({},{"name":1,'_id':0}):
        print(i)

    结果:

    {'name': '小明'}
    {'name': '小李'}
    {'name': '小张'}
    {'name': '小丽'}
    {'name': '小红'}
    # 查找'age'为12的记录,返回它的'name'的值
    for i in test.student_info.find({'age':12},{"name":1,'_id':0}):
        print(i)

    结果:

    {'name': '小明'}
    {'name': '小丽'}

    5.查看聚集的多条记录(find)

    # 查看聚集的多条记录
    for i in test.student_info.find():
        print(i)

    结果:

    {'city': '广州', 'hobby': ['足球', '游戏'], 'age': 12, '_id': ObjectId('571c522513d59412f4cbf78c'), 'name': '小明'}
    {'city': '北京', 'hobby': ['篮球'], 'age': 11, '_id': ObjectId('571c522513d59412f4cbf78d'), 'name': '小李'}
    {'city': '上海', 'hobby': ['吃饭', '睡觉', '发呆'], 'age': 9, '_id': ObjectId('571c522513d59412f4cbf78e'), 'name': '小张'}
    {'city': '苏州', 'hobby': ['音乐'], 'age': 12, '_id': ObjectId('571c522513d59412f4cbf78f'), 'name': '小丽'}
    {'city': '南京', 'hobby': ['读书'], 'age': 8, '_id': ObjectId('571c522513d59412f4cbf790'), 'name': '小红'}
    # 查看'age'值为12的全部记录
    for i in test.student_info.find({'age':12}):
        print(i)

    结果:

    {'_id': ObjectId('571c522513d59412f4cbf78c'), 'city': '广州', 'hobby': ['足球', '游戏'], 'age': 12, 'name': '小明'}
    {'_id': ObjectId('571c522513d59412f4cbf78f'), 'city': '苏州', 'hobby': ['音乐'], 'age': 12, 'name': '小丽'}

     6.查看聚集的记录统计(count,distinct)

    # 查看聚集的总数
    print(test.student_info.find().count())

    结果:

    5

    查看聚类中某个键的所有值

    # 查看聚类中某个键的所有值
    print(test.student_info.distinct('city'))

    结果:

    ['广州', '北京', '上海', '苏州', '南京']

    7.聚集查询结果排序(sort)

    # 默认为升序
    for i in test.student_info.find().sort("age"):
        print(i)
    
    # 升序
    for i in test.student_info.find().sort("age",pymongo.ASCENDING):
        print(i)
    
    # 降序
    for i in test.student_info.find().sort("age",pymongo.DESCENDING):
        print(i)

    聚集查询结果多列排序

    for i in test.student_info.find().sort([("age",pymongo.ASCENDING),("name",pymongo.DESCENDING)]):
        print(i)

    8.添加记录(insert_one,insert_many)

    # 添加记录
     test.student_info.insert_one({'name':'小白'})
    # 用迭代来添加记录
    name_list = ['小A','小B','小C']
    test.student_info.insert_many({'name':i} for i in name_list)
    
    name_list = ['小x','小y','小z']
    age_list = [10,11,12]
    test.student_info.insert_many({'name':i,'age':j} for i in name_list for j in age_list)

    9.修改记录(update_one,update_one)

    修改一条记录:

    # 找出'age'值为12的记录,把这些记录的第一条的'age'值改为100(注意:本用法只修改一条记录)
    test.student_info.update_one({'age': 12}, {'$set': {'age': 100}})

    修改多条记录:

    # 找出'age'值为100的记录,把这些记录的'age'值改为12(注意:本方法修改所有符合条件的记录)
    test.student_info.update_many({'age': 100}, {'$set': {'age': 12}})

    小技巧:修改全部记录:

    # 以_id为索引,遍历全部记录,并把每一条的'age'值修改为:100
    for i in test.student_info.find():
        test.student_info.update_one({'_id':i['_id']}, {'$set': {'age': 100}})

    10.删除记录(delete_one,delete_many)

    删除一条记录:

    # 删除第一条'name'值为'小明'的记录
    test.student_info.delete_one({'name':'小明'})

    删除多条记录:

    # 删除全部'age'值为12的记录
    test.student_info.delete_many({'age':12})

     11.替换记录(replace_one)

    替换一条记录:

    # 找出'city'值为'北京'的记录,替换为'hometown':'廊坊',注意:是替换记录内的全部内容,并非只是替换'city'字段
    test.student_info.replace_one({'city':'北京'},{'hometown':'廊坊'})
    
    for i in test.student_info.find({'hometown':'廊坊'}):
         print(i)

    结果:

    {'_id': ObjectId('571c901b13d5942564a5a23e'), 'hometown': '廊坊'}

    12.删除聚类

    # 删除聚类
    test.student_info.drop()



  • 相关阅读:
    [Codeforces Round #516][Codeforces 1063C/1064E. Dwarves, Hats and Extrasensory Abilities]
    接入gitment为hexo添加评论功能
    常用SQL语句
    小米前端二面面经
    将hexo的评论系统由gitment改为Valine
    同步与异步
    前端构建工具对比
    前端向后台发送请求有哪些方式
    关于hexo markdown添加的图片在github page中无法显示的问题
    使用TensorBoard可视化工具
  • 原文地址:https://www.cnblogs.com/singeldiego/p/5426894.html
Copyright © 2020-2023  润新知