美文网首页
Mongodb 与 python 的交互(二)

Mongodb 与 python 的交互(二)

作者: 程猿先生 | 来源:发表于2017-08-23 21:46 被阅读0次

    Mongodb的安装及使用(一)
    Mongodb 与 python 的交互(二)
    mongodb数据库备份和恢复(三)

    1.Pymongo

    PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。
    官方文档

    2.安装

    进入虚拟环境
    sudo pip install pymongo
    或源码安装
    python setup.py
    

    3.使用

    导入模块

    import pymongo
    

    建立于MongoClient 的连接:

    client = MongoClient('localhost', 27017) 
    # 或者 
    client = MongoClient('mongodb://localhost:27017/')
    

    得到数据库

    db = client.test_database
    # 或者 
    db = client['test-database']
    

    得到一个数据集合

    collection = db.test_collection
    # 或者 
    collection = db['test-collection']
    

    MongoDB中的数据使用的是类似Json风格的文档

    >>> import datetime 
    >>> post = {"author": "Mike",    
                "text": "My first blog post!",    
                "tags": ["mongodb", "python", "pymongo"], 
                "date": datetime.datetime.utcnow()}
    

    插入一个文档

    >>> posts = db.posts 
    >>> post_id = posts.insert_one(post).inserted_id 
    >>> post_id 
    ObjectId('...')
    

    查找一条数据

    >>> posts.find_one() 
    {u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}   
    >>> posts.find_one({"author": "Mike"}) 
    {u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}   
    >>> posts.find_one({"author": "Eliot"}) 
    >>>
    

    通过ObjectId来查找

    >>> post_id ObjectId(...) 
    >>> posts.find_one({"_id": post_id})
    {u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']}
    

    不要转化ObjectId的类型为String

    >>> post_id_as_str = str(post_id) 
    >>> posts.find_one({"_id": post_id_as_str}) # No result 
    >>>
    

    如果post_id是字符串

    from bson.objectid import ObjectId  
    # The web framework gets post_id from the URL and passes it as a string def get(post_id):   
        # Convert from string to ObjectId:   
        document = client.db.collection.find_one({'_id': ObjectId(post_id)})
    

    多条插入

    >>> new_posts = [{"author": "Mike", 
                      "text": "Another post!", 
                      "tags": ["bulk", "insert"], 
                      "date": datetime.datetime(2009, 11, 12, 11, 14)}, 
                      {"author": "Eliot", 
                      "title": "MongoDB is fun", 
                      "text": "and pretty easy too!", 
                      "date": datetime.datetime(2009, 11, 10, 10, 45)}] 
    >>> result = posts.insert_many(new_posts) 
    >>> result.inserted_ids 
    [ObjectId('...'), ObjectId('...')]
    

    查找多条数据

    >>> for post in posts.find(): 
    ...  post 
    ... 
    {u'date': datetime.datetime(...), u'text': u'My first blog post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'mongodb', u'python', u'pymongo']} 
    {u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'bulk', u'insert']} 
    {u'date': datetime.datetime(2009, 11, 10, 10, 45), u'text': u'and pretty easy too!', u'_id': ObjectId('...'), u'author': u'Eliot', u'title': u'MongoDB is fun'} 
    
    #查找多个文档2
    cur=stu.find()
    cur.next()
    

    获取集合的数据条数

    posts.count() 
    
    #满足某种查找条件的数据条数:
    posts.find({"author": "Mike"}).count()
    

    范围查找

    #比如说时间范围
    >>> d = datetime.datetime(2009, 11, 12, 12) 
    >>> for post in posts.find({"date": {"$lt": d}}).sort("author"): 
    ...  print post 
    {u'date': datetime.datetime(2009, 11, 10, 10, 45), u'text': u'and pretty easy too!', u'_id': ObjectId('...'), u'author': u'Eliot', u'title': u'MongoDB is fun'} 
    {u'date': datetime.datetime(2009, 11, 12, 11, 14), u'text': u'Another post!', u'_id': ObjectId('...'), u'author': u'Mike', u'tags': [u'bulk', u'insert']}
    
    

    4.Mongodb与python交互列子

    #-*- coding:utf-8 -*-
    import pymongo
    import datetime
    def system():
        print ('欢迎进入短文管理系统')
        print ('1.增加信息')
        print ('2.删除信息')
        print ('3.修改信息')
        print ('4.查看数据')
        print ('5.搜索信息')
        print ('6.退出')
    
        #建立与MongoClient的连接
        client = pymongo.MongoClient('localhost',27017)
        #创建并得到一个数据库
        db = client.test
        #得到一个数据集合
        msg = db.users
        # msg.create_index([('time',pymongo.ASCENDING)],expireAfterSeconds=600)
    
        while True:
            order = int(raw_input('请输入要进行的操作:'))
            if order==1:
                name = raw_input('请输入短文标题:')
                desc = raw_input('请输入内容:')
                data = {
                    "name":name,
                    "desc":desc,
                    "date":datetime.datetime.utcnow(),
                }
                msg.insert_one(data)
                print ('添加成功')
    
            elif order==2:
                name = raw_input('请输入你要删除的短文:')
                exit = msg.count({"name":name})
                if exit!=0:
                    msg.remove({'name':name})
                    print ('删除成功')
                else:
                    print ('没有此信息')
    
            elif order==3:
                name = raw_input('请输入要修改的短文:')
                exit = msg.count({"name":name})
                if exit!=0:
                    desc = raw_input('请输入内容:')
                    msg.update({"name":name},{'$set':{'desc':desc}})
                    print ('修改成功')
                else:
                    print ('你要修改的短文不存在')
    
            elif order==4:
                exit = msg.count({})
                if exit==0:
                    print ('抱歉!还没有数据')
                else:
                    for data in msg.find():
                        content=data['name']+data['desc']
                        print content
    
    
            elif order==5:
                name = raw_input('请输入你要查看的短文:')
                exit = msg.count({'name':name})
                if exit!=0:
                    data = msg.find_one({'name':name})
                    content = data['name']+data['desc']
                else:
                    print ('你要查看的短文不存在')
    
            elif order==6:
                print ('感谢使用')
                break
            else:
                print ('请输入1/2/3/4/5/6相关指令')
    
    if __name__=='__main__':
        system()
    
    

    相关文章

      网友评论

          本文标题:Mongodb 与 python 的交互(二)

          本文链接:https://www.haomeiwen.com/subject/jtbjdxtx.html