A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 杰哥,我就服你 于 2019-5-16 14:28 编辑

mongodb与python的交互


1. mongdb和python交互的模块
pymongo 提供了mongdb和python交互的所有方法 安装方式: pip install pymongo

2. 使用pymongo
  • 导入pymongo并选择要操作的集合 数据库和集合乜有会自动创建

from pymongo import MongoClient client = MongoClient(host,port) collection = client[db名][集合名]
  • 添加一条数据

ret = collection.insert_one({"name":"test10010","age":33}) print(ret)
  • 添加多条数据

item_list = [{"name":"test1000{}".format(i)} for i in range(10)]     #insert_many接收一个列表,列表中为所有需要插入的字典 t = collection.insert_many(item_list)
  • 查找一条数据

#find_one查找并且返回一个结果,接收一个字典形式的条件 t = collection.find_one({"name":"test10005"}) print(t)
  • 查找全部数据

结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,但是只能够进行一次读取
#find返回所有满足条件的结果,如果条件为空,则返回数据库的所有 t = collection.find({"name":"test10005"})     #结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针, for i in t:     print(i) for i in t: #此时t中没有内容     print(i)
  • 更新一条数据 注意使用$set命令

#update_one更新一条数据 collection.update_one({"name":"test10005"},{"$set":{"name":"new_test10005"}})
  • 更行全部数据

# update_many更新全部数据 collection.update_many({"name":"test10005"},{"$set":{"name":"new_test10005"}})
  • 删除一条数据

#delete_one删除一条数据 collection.delete_one({"name":"test10010"})
  • 删除全部数据

#delete_may删除所有满足条件的数据 collection.delete_many({"name":"test10010"})

例子:
from pymongo import MongoClient

"""
步骤:
1. 导入: from pymongo import MongoClient
2. 链接: client = MongoClient
3. 获取要操作的集合: collection  = client['数据库名']['集合名']
4. 操作集合, 增删改查
5. 关闭数据链接, 释放资源: client.close()
"""

class MongoTest(object):

    def __init__(self):
        """创建client对象, 建立数据库链接"""
        # 开启认证模式
        # 方式1: 分别指定
        # self.client = MongoClient(host='127.0.0.1', port=27017, username='py8', password='123')
        # 方式2: 指定URI
        # self.client = MongoClient('mongodb://py8:123@127.0.0.1:27017')
        # 不开启认证模式
        self.client = MongoClient()
        # self.client = MongoClient(host='127.0.0.1', port=27017)
        # print(self.client)
        self.collection = self.client['py8']['test']

    def __del__(self):
        """ 关闭数据链接, 释放资源"""
        self.client.close()


    def insert_one(self):
        """插入一条数据"""
        self.collection.insert_one({'name':'老王', 'age':18})

    def insert_many(self):
        """插入多条数据"""
        # 准备字典列表
        datas = [{'name': 'test_{}'.format(i), 'age': i} for i in range(20)]
        # 插入多条
        self.collection.insert_many(datas)

    def update_one(self):
        """更新一条数据"""
        # 把年龄小于10岁的改为16岁
        self.collection.update_one({'age':{'$lt': 10}}, {'$set': {'age': 16}})

    def update_many(self):
        """更新多少条件"""
        # 把年龄小于10岁的改为16岁
        self.collection.update_many({'age':{'$lt': 10}}, {'$set': {'age': 16}})

    def find_one(self):
        """查看一条数据"""
        data = self.collection.find_one({'age': {'$lt': 16}})
        print(data)
        print(type(data))

    def find_many(self):
        """查询多条数据"""
        cursor = self.collection.find({'age': {'$lt': 16}})
        # 查询多少数据, 返回时一个游标对象, 可以进行遍历, 但是只能遍历一次
        # print(cursor)
        for data in cursor:
            print(data)

        print('='*50)

        for data in cursor:
            print(data)

    def delete_one(self):
        """删除一条数据"""
        self.collection.delete_one({'age': {'$lte': 16}})

    def delete_many(self):
        """删除多条数据"""
        self.collection.delete_many({'age': {'$lte': 16}})

if __name__ == '__main__':
    mt = MongoTest()
    # mt.insert_one()
    # mt.insert_many()
    # mt.update_one()
    # mt.update_many()
    # mt.find_one()
    # mt.find_many()
    # mt.delete_one()
    mt.delete_many()







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马