zoukankan      html  css  js  c++  java
  • MongoDB数据库(6)__motor

    2019.7.22:

    motor是异步实现python操作数据库的工具。能减少后端访问数据库的延迟。


    Motor 是一个异步实现的 MongoDB 存储库 Motor 与 Pymongo 的配置基本类似。连接对象就由 MongoClient 变为 AsyncIOMotorClient 了。

    一、连接

    # 普通连接
    client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://localhost:27017')
    # 副本集连接
    client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://host1,host2/?replicaSet=my-replicaset-name')
    # 密码连接
    client = motor.motor_asyncio.AsyncIOMotorClient('mongodb://username:password@localhost:27017/dbname')
    # 获取数据库
    db = client.zfdb
    # db = client['zfdb']
    # 获取 collection
    collection = db.test
    # collection = db['test']

    二、添加一条记录

    async def do_insert():
         document = {'name': 'zone','sex':'boy'}
         result = await db.test_collection.insert_one(document)
         print('result %s' % repr(result.inserted_id))
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_insert())

    三、批量增加记录

    async def do_insert():
        result = await db.test_collection.insert_many(
            [{'name': i, 'sex': str(i + 2)} for i in range(20)])
        print('inserted %d docs' % (len(result.inserted_ids),))
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_insert())

    四、查找一条记录

    async def do_find_one():
        document = await db.test_collection.find_one({'name': 'zone'})
        pprint.pprint(document)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_find_one())

    五、查找多条记录

    async def do_find():
        cursor = db.test_collection.find({'name': {'$lt': 5}}).sort('i')
        for document in await cursor.to_list(length=100):
            pprint.pprint(document)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_find())
    
    # 添加筛选条件,排序、跳过、限制返回结果数
    async def do_find():
        cursor = db.test_collection.find({'name': {'$lt': 4}})
        # Modify the query before iterating
        cursor.sort('name', -1).skip(1).limit(2)
        async for document in cursor:
            pprint.pprint(document)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_find())

    六、统计

    async def do_count():
        n = await db.test_collection.count_documents({})
        print('%s documents in collection' % n)
        n = await db.test_collection.count_documents({'name': {'$gt': 1000}})
        print('%s documents where i > 1000' % n)
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_count())

    七、替换

    async def do_replace():
        coll = db.test_collection
        old_document = await coll.find_one({'name': 'zone'})
        print('found document: %s' % pprint.pformat(old_document))
        _id = old_document['_id']
        result = await coll.replace_one({'_id': _id}, {'sex': 'hanson boy'})
        print('replaced %s document' % result.modified_count)
        new_document = await coll.find_one({'_id': _id})
        print('document is now %s' % pprint.pformat(new_document))
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_replace())

    八、更新指定字段,不会影响到其他内容

    async def do_update():
        coll = db.test_collection
        result = await coll.update_one({'name': 0}, {'$set': {'sex': 'girl'}})
        print('更新条数: %s ' % result.modified_count)
        new_document = await coll.find_one({'name': 0})
        print('更新结果为: %s' % pprint.pformat(new_document))
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_update())

    九、删除置顶记录

    async def do_delete_many():
        coll = db.test_collection
        n = await coll.count_documents({})
        print('删除前有 %s 条数据' % n)
        result = await db.test_collection.delete_many({'name': {'$gte': 10}})
        print('删除后 %s ' % (await coll.count_documents({})))
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(do_delete_many())
  • 相关阅读:
    【转】PG数据库高级用法 之 12306 -- 链接
    javascript实现浏览器管理员工具鼠标获取Html元素 并生成 xpath
    java图片识别 [Tesseract-OCR]
    MongoDB从环境搭建到代码编程(Window 环境)
    webDriver + Firefox 浏览器 完美兼容
    SQLServer 将日期改造成标准日期格式(如: 2016/6 ->201606)
    Angularjs+bootstrap 实现横向滑屏
    js数组长度
    Angularjs 跨域post数据到springmvc
    Oracle 18c 数据库中scott用户不存在的解决方法
  • 原文地址:https://www.cnblogs.com/marvintang1001/p/11227620.html
Copyright © 2011-2022 走看看