zoukankan      html  css  js  c++  java
  • python之pymongo

    引入

    在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库。

    MongoDB 数据库安装与介绍可以查看之前的 MongoDB 教程。

    安装

    pip3 install pymongo

    使用pymongo

    一,连接MongoClient

    使用pymongo的第一步首先是连接Client来使用服务:

    from pymongo import MongoClient
    Client = MongoClient()

    二,获取数据库(database)

    在MongoDB中一个实例能够支持多个独立的数据库,你可以用点取属性的方式来获取数据库,或者通过字典的方式获取:

    db = Client.test_database
    db = Client['test_database']

    (注:'test'可以换成你想要用的名字,比如"python_database")

    三,获取Collection

    Collection是存储在MongoDB中的一组文件,同获取database一样,你可以用点取属性的方式或者字典的方法获取:

    collection = db.test_collection
    collection = db['test_collection']

    四,存储数据

    在MongoDB中,数据是以BSON的类型存储的。见下面的post:

    import datetime
    post = ['type':'BSON', 'date':datetime.datetime.utcnow()]

    了解完MongoDB的数据格式后,你可以通过以下的方式插入数据(其中.inserted_id将返回ObjectId对象):

    document1 = {'x':1}
    document2 = {'x':2}
    posts = db.posts     #你也可以不这样做,每次通过db.posts调用
    post_1 = posts.insert_one(document1).inserted_id
    post_2 = posts.insert_one(document2).inserted_id

    每个插入的数据对应一个ObjectId,可直接查看:

    >>>post_1
    ObjectId(...)
    >>>post_2
    ObjectId(...)

    你还可以用insert_many()插入多个文档:

    new_document = [{'x':3}, {'x':4}]
    result = posts.insert_many(new_document)
    
    >>>result.inserted_ids
    [ObjectId(...),ObjectId(...)]

    五,从MongoDB中调用数据

    >>>posts.find_one()
    ['x':'1']

    但用find_one()的方法只能获取一个数据,如果数据库中存在多个数据时,它返回的是第一个的值。你也可以通过ObjectId来请求数据,效果和上面是一样的。如果你想打印出全部数据,可以通过迭代的方式获取:

    >>>for data in posts.find():
    >>>    data
    >>>
    {u'x':1, u'x':2, u'x':3, u'x':4}

    你也可以加入限制性因素来获取特定的数据:

    >>>for post in posts.find({'x':1}):
    >>>    post
    >>>
    {u'x':1}

    查找条件中也可以用正则匹配来匹配calue。

    六,更新数据

    在pymongo中可以用update_one()来更新数据:

    >>>posts.update_one({'x':4},{'$set':{'x':3}})

    其中传入的第一个参数是你想要更新的数据,第二个是你想要更新的最新数据。其中$set部分是必要元素,如果没有会报出错误。除了$set外还有很多其它的比如$inc,对应着不同的功能,在此先不赘述。

    上面只是更新匹配到的第一个数据,同样地,也可以用update_many()一次更新多个值。

    七,删除数据

    同上,可以用delete_one()和delete_many()方法来删除数据,括号中是筛选条件:

    >>>posts.delete_one({'x':3})
    >>>posts.delete_one({'x':2})

    八,计数

    如果想知道collection中有多少文档,可以用.count()请求来获取符合条件的文档。

    >>>posts.count()
    4
    >>>posts.find({'x':1})
    1

    完!!!

  • 相关阅读:
    应用程序加载外部字体文件(使用AddFontResource API函数指定字体)
    动态调整对话框属性(去掉标题栏,去掉边框,修改类似成Border:NONE样式)(调用ModifyStyle和ModifyStyleEx,然后调用SetWindowPos重新显示)
    输出进程相关联的环境变量信息(使用GetEnvironmentStrings取得信息,然后使用StringCchCopyN和StringCchPrintf保证字符串不会越界)
    基于QT的换肤整体解决方案(QSkinStyle)(提供Linux的XP风格)
    .NET代码自动编译发布
    c#写windows服务
    MVC——分页控件
    WCF入门教程(图文)VS2012
    MSDN官方XmlSerializer类导致内存泄漏和性能低
    学SpringMVC收藏
  • 原文地址:https://www.cnblogs.com/peng104/p/10363091.html
Copyright © 2011-2022 走看看