python爬虫之MongoDB——MongoDB与python的交互

MongoDB与python的交互

  • 1 pymongo安装
  • 2 连接数据库
  • 3 增删查改
    • 3.1 新增数据
    • 3.2 查询数据
    • 3.3 修改数据
    • 3.4 删除数据
    • 3.5 完整示例

1 pymongo安装

pip install pymongo

2 连接数据库

方式一
client = MongoClient()
方式二 指定端口和地址
client = MongoClient('localhost',27017)
方式三 使用URI  不是URL
client = MongoClient('mongodb://localhost:27017/')

3 增删查改

3.1 新增数据

from pymongo import MongoClient
from datetime import datetime

class TestMongo(object):
    def __init__(self):
        self.client = MongoClient('mongodb://localhost:27017/')
        # 也可以指定连接的集合client['admin']['students']
        self.db = self.client['admin']
        # print(self.client.database_names())

    def add_one(self):
        post = {'title':'标题','content':'内容','created_at':datetime.now()}
        # db.students   students 是表明
        res = self.db.students.insert_one(post)
        return res
        
    def add_more(self):
        data_list = [{"name":"test{}".format(i)} for i in range(5)]
        res = self.db.students.insert_many(data_list)
        return res
    

mongo = TestMongo()
res = mongo.add_one()
插入的ID
print(res.inserted_id)

3.2 查询数据

from bson.objectid import ObjectId
查询一条数据
def get_one(self):
    return self.db.students.find_one()

查询多条数据
def get_more(self):
    return self.db.students.find()

根据记录的ID查询数据
def get_from_id(self,id):
    return self.db.students.find_one({'_id':ObjectId(id)})

查询一条数据 
res = mongo.get_one()
查询多条数据
res = mongo.get_more()
for i in res:
	print(i)
根据记录的ID查询数据
res = mongo.get_from_id('5b83e8a1b594c32e8c70c1f7')
print(res)

3.3 修改数据

修改单条数据
def update(self):
    res = self.db.students.update_one({'title':'标题'},{'$set':{'title':'title-2'}})
    # 匹配的数据条数
    print(res.matched_count)
    # 影响的数据条数。
    print(res.modified_count)

修改多条
def update_more(self):
    res = self.db.students.update_many({},{'$set':{'x':1}})
    print(res.matched_count)
    print(res.modified_count)
    res = self.db.students.update({'x':2},{'$set':{'x':3}},True)
    
res = mongo.update()
res = mongo.update_more()

3.4 删除数据

删除一条
def delete_one(self):
    res = self.db.students.delete_one({'title':'title-2'})
    print(res.deleted_count)

删除多条
def delete_more(self):
    res = self.db.students.delete_many({'x':2})
    print(res.deleted_count)
    
res = mongo.delete_one()
res = mongo.delete_more()

3.5 完整示例

# python操作MongoDB
# 导入模块
# 连接MongoDB
# 操作MongoDB(增删改查)

import pymongo
from bson.objectid import ObjectId


class MongoData(object):
    """mongodb类"""
    def __init__(self, name):
        """连接数据库,选择数据库"""
        self.client = pymongo.MongoClient(host='127.0.0.1', port=27017)
        self.db = self.client['juran'][name]
        # self.db = self.client['juran']

    def add_one(self, data):
        """
        :param data: 添加一条记录
        :return: 添加成功记录的ID
        """
        result = self.db.insert_one(data)
        # print(result)
        return result.inserted_id

    def add_many(self, data):
        """
        :param data: 添加多条记录
        :return: 添加成功记录的ID
        """
        result = self.db.insert_many(data)
        return result.inserted_ids

    def get_one(self, query=None):
        """
        查询一条记录
        :param query: 查询条件
        :return: 查询记录
        """
        if query is None:
            return self.db.find_one()
        else:
            return self.db.find_one(query)

    def get_many(self, query=None):
        """
        :param query: 查询条件
        :return: 查询记录
        """
        if query is None:
            return self.db.find()
        else:
            return self.db.find(query)

    def modified_one(self, data, query=None):
        """
        :param data: 原有的数据
        :param query: 修改后的数据
        :return: 修改记录的条数
        """
        result = self.db.update_one(data, {'$set': query})
        return result.modified_count

    def modified_many(self, query=None):
        result = self.db.update_many({}, {'$set': query})
        return result.modified_count

    def remove_one(self, query=None):
        """
        :param query: 删除数据条件
        :return: 删除记录条数
        """
        result = self.db.delete_one(query)
        return result.deleted_count

    def remove_many(self, query=None):
        """
        :param query: 删除数据条件
        :return: 删除记录条数
        """
        result = self.db.delete_many(query)
        return result.deleted_count

if __name__ == '__main__':
    md = MongoData('student')
    # md = MongoData()
    # r = md.add_one({"name": "lg"})
    # print(r)
    # r = md.add_many([{'x': i} for i in range(2)])
    # print(r)
    # r = md.get_one()
    # r = md.get_many({"_id": ObjectId("5f2018633636f262540d4c37")})
    # for i in r:
    #     print(i)
    # r = md.modified_one({"name": "lg"}, {"name": "lgcoder"})
    # r = md.modified_many({"age": 18})
    # r = md.remove_many({"age": 18})
    # print(r)

你可能感兴趣的:(python爬虫之MongoDB——MongoDB与python的交互)