面向过程

# 用Python操作 MongoDB数据库

# python 连接MongoDB数据库要用到 pymongo 模块
import pymongo

# 1. 建立连接
client = pymongo.MongoClient()  # 建立客户端连接

# 2. 指定数据库
db = client['python37']

# 3. 指定集合
my_col = db['student']

# 文档操作 (数据的增删改查)
# 增
# my_col.insert_one({'name':'long', 'age': 18, 'sex': 'M'})   # 插入一条数据

# my_col.insert_many([      # 增加多条数据
    # {'name': 'cheng', 'age': 19, 'sex': 'M'},
    # {'name': 'yan', 'age': 18, 'sex': 'F'},
    # {'name': 'love', 'age': 17, 'sex': 'F'},
    # {'name': 'yellow', 'age': 20},
# ])

# 查
res = my_col.find_one()   # 只拿第一条
print(res)

res = my_col.find()  # 拿到所有的数据
# print(res)  # 一个地址, 可以迭代的对象
# for i in res:
    # print(i)


# 改
# my_col.update_one({'name': 'love'}, {'$set': {'name': 'greenyellow'}})    # 修改一条数据
my_col.update_many({'name': 'yan'}, {'$set': {'name': 'yanyan'}})   # 修改满足条件的所有数据


# 删
# res = my_col.delete_one({'name': 'greenyellow'})    # 删除一个并返回
res = my_col.delete_many({'name': 'cheng'})           # 删除满足条件的所有数据
print(res)      #

面向对象

import pymongo
"""
find_one()  find()
insert_one() insert_many()
update_one() update_many()
delete_one() delete_many()
"""


class MyMongoDBWrapper(object):
    """把pymongo操作mongodb数据库的 '增删除改查' 方法封装成一个类中的方法"""
    def __init__(self, host, port, db):
        """初始化"""
        # 1. 连接
        # self.client = pymongo.MongoClient(host='192.168.0.1', port='27017')
        self.client = pymongo.MongoClient(host=host, port=port)
        # 2. 指定数据库
        self.db = self.client[db]

    def insert(self, col='stu', data={}):  # data默认为字典
        """插入数据"""

        col = self.db[col]  # 指定要为哪个集合插入数据

        if type(data) == dict:      # 如果传入的数据是一个字典,则说明是插入一条数据
            col.insert_one(data)
        elif type(data) == list:    # 是一个列表, 则说明要插入多条数据
            col.insert_many(data)
        else:
            # return "不好意思,你插入数据的格式不对,请重试"
            print('不好意思,你插入数据的格式不对,请检查好后重试')
            exit()

    def find(self, if_data=None, col='stu',find_one=True):   # find_one=True 默认查找一条
        """查找"""
        col = self.db[col]
        if find_one:
            res = col.find_one(if_data)
            return res
        else:
            res = col.find(if_data)
            return res

    def update(self, col='stu', update_one=True, if_data={}, new_data={}):
        """修改, # 更新"""
        col = self.db[col]
        if update_one:
            col.update_one(if_data, {'$set': new_data})
        else:
            col.update_many(if_data, {'$set': new_data})

    def delete(self, col='stu', if_data={}, delete_one=True):
        """删除"""
        col = self.db[col]
        if delete_one:
            col.delete_one(if_data)
        else:
            col.delete_many(if_data)


if __name__ == '__main__':
    mymongodb = MyMongoDBWrapper(host='192.168.0.7', port=27017, db='py3')

    # 1. 增
    doc = {'long': 'long', 'age': 18, 'sex': 'M'}
    mymongodb.insert(col='stu2', data=doc)      # 插入一条数据, 如果不指定col, 则默认使用 col='stu'
    docs = [
        doc,
        {'name': 'qiye', 'age': 45, 'sex': 'M'},
        {'name': 'cheng', 'age': 20, 'sex': 'F'}
    ]
    mymongodb.insert(data=docs)     # 不指定col, 所以会为默认的集合 stu 插入多条数据

    # 2. 查
    # mymongodb.find(if_data={'age': 18})     # 查找满足条件的第一条数据
    res = mymongodb.find()    # 查找第一条数据, stu集合
    print(res)
    res =  mymongodb.find(find_one=False)         # 查找所有数据, 没有指定, 也是stu用的stu集合
    for i in res:
        print(i)

    # 3. 改
    mymongodb.update(col='stu2', if_data={'name': 'long'}, new_data={'name': 'long2'})   # 修改一条
    mymongodb.update(col='stu2', update_one=False, if_data={'name': 'long'}, new_data={'name': 'long3', 'age': 23, 'prrtty': 'Yes'})       # 修改所有满足条件的数据

    # 4. 删
    mymongodb.delete(col='stu2', if_data={'name': 'long2'})     # 删除一条
    mymongodb.delete(col='stu2', if_data={'name': 'long3'}, delete_one=False)   # 删除所有满足条件的
01-16 12:15