`

Python搭配MongoDB使用方法

阅读更多

 

Python搭配MongoDB使用方法

原文地址:http://serholiu.com/python-mongodb

 

 

MongoDB

 

 

下面就谈谈Python操作MongoDB的一些基本用法,先介绍一下MongoDB,这是现在风头正劲的NoSQL数据库,没有关系数据库那种表之类的概念,就像Python中的字典一样,一个键对应一个值,然后这些键值组成一个文档,然后文档组成一个集合,集合再组成一个数据库,类型十分丰富,使用Python操作MongoDB需要安装MongoDB的Python驱动,安装完成后,就可以和我一起开始了。

启动数据库(具体方法不是本文重点),连接数据库。

1     >>> from pymongo import Connection #导入模块
2     >>> con = Connection()
3     >>> db = con.test #连接test数据库
4     >>> posts = db.post #连接test中的post集合,相当于MySQL中的表

 

很好的一点就是,数据库不需要先建立,在连接后,如果进行插入数据操作,系统可以自己创建,我们假设一个post集合,里面是一些博客文章组成的文档。下面先插入几篇文章做实验。

 

 1     >>> import datetime
 2     >>> post1 = {"title":"I Love Python",
 3          "slug":"i-love-python",
 4          "author":"SErHo",
 5          "content":"I Love Python....",
 6          "tags":["Love","Python"],
 7          "time":datetime.datetime.now()}
 8  
 9     >>> post2 = {"title":"Python and MongoDB",
10          "slug":"python-mongodb",
11          "author":"SErHo",
12          "content":"Python and MongoDB....",
13          "tags":["Python","MongoDB"],
14          "time":datetime.datetime.now()}
15  
16     >>> post3 = {"title":"SErHo Blog",
17          "slug":"serho-blog",
18          "author":"Akio",
19          "content":"SErHo Blog is OK....",
20          "tags":["SErHo","Blog"],
21          "time":datetime.datetime.now()}
22  
23     >>> posts.insert(post1)
24     >>> posts.insert(post2)
25     >>> posts.insert(post3)

 

增加数据就是这样的简单,不需要事先定义文档的机构,每个文档的结构也可以不一样,上面我举的例子是一样的,这可以根据实际需求来设置,我这个是为了好讲解下面的。插入过后,肯定最先的是查询,下面查询出post集合里面的所有文档:

1     >>> posts = posts.find()
2     >>> count = posts.count()
3     >>> for post in posts:
4             print post

数据库使用游标来返回find的结果,游标上有多种方法,比如上面的count(),就可以得到查询到的文档总数。这个例子将返回”count=3″和上面的那三篇文档。更多查询方法在后面将讲解,这些方法更加强大。

插入过后可能发现需要修改,于是下面讲解一些修改的方法。如果需要大幅度的修改,什么是大幅度的修改呢,比如把post1的title,slug,author等都修改了,我的理解就是大于一个键的修改就叫大幅修改。修改一个东西,你得先找到他,所以查询方法就很重要了,不幸的是,这个准备后面才将。我们先随便查找一个来修改吧。

 1     >>> post = posts.find_one({"slug":"python-mongodb"})
 2     >>> post["author"]
 3     u'SErHo'
 4     >>> post["author"] = "HaHa Lu"
 5     >>> post["title"] = "Test Update"
 6     >>> post["title"] = "Test Update"
 7     >>> post["_id"]
 8     ObjectId('4ea0207dd483050fe8000001')
 9     >>> posts.update({"_id":post["_id"]},post)
10     >>> post = posts.find_one({"_id":post["_id"]})
11     >>> print post
12     {u'author': u'HaHa Lu', u'title': u'Test Update',
13      u'tags': [u'Python', u'MongoDB'],
14      u'content': u'Python and MongoDB....',
15      u'time': datetime.datetime(2011, 10, 20, 21, 21, 52, 818000),
16      u'_id': ObjectId('4ea0207dd483050fe8000001'),
17      u'slug': u'python-mongodb'}

首先我们根据slug来获得一篇文章,然后可以通过Python字典访问方法得到键的值,然后重新设置,再对post集合进行更新,在对整个集合进行更新时,你得先匹配要更改的文档,利用_id这个属性来更新是比较常用的方法,因为你其他改了,这个可改不了。在执行update中最常见的错误就是限制的条件找到了多个文档,如果这样,数据库就不会更新这个集合,所有最好使用_id来匹配。

如果只更新一个键呢,那就不用这么大费周折了,可以使用”$set”这个修改器,指定一个键,如果不存在,就可以创建。比如我要继续更新上面那篇文章的content,可以这样做(记住,修改它,必须先找到它,这里我利用上面查询到的_id值来找):

1     >>> posts.update({"_id":post["_id"]},{"$set":
2                    {"content":"Test Update SET...."}})

MongoDB的修改是很强大的,你可以把数据类型也给改了,比如把tags的数组改成普通的字符串。”$set”过后又想删除这个键,可以使用”$unset”。如果我的这个post里面有一个键是views,即文章访问的次数,我想在每次访问这个文章后给它的值增加1,这该怎么办?于是”$inc”修改器出场了,这个可以用来增加已有键的值,如果没有,则创建它,类似的用法是:

1    
2     >>> posts.update({"_id":post["_id"]},{"$inc":  {"views":1}})

如果想修改tags这个数组里面的内容怎么办?有一个办法就是用$set整体修改,但只是改里面的一些元素呢,MongoDB准备好了用于数组的修改器。比如,想要在tags里面加一个”Test”,这需要使用”$push”,它可以在数组末尾添加一个元素:

1     >>> posts.update({"_id":post["_id"]},{"$push":{"tags":"Test"}})

为了避免加入了重复的,可以将”$push”改为使用”$addToSet”,如果需要添加多个值,可以配合”$each”来使用,这样就可以添加不重复的进去,如下面:

1  
2     >>> posts.update({"_id":post["_id"]},{"$addToSet":
3                           {"tags":{"$each":["Python","Each"]}}})

说完了添加,下面是删除,可以把数组看成栈和队列,使用”$pop”来操作,比如上面的:

1     >>> posts.update({"_id":post["_id"]},{"$pop":{"tags":1}})

这个会删除tags里面最后一个,改成-1则删除第一个。可以使用”$pull”来删除数组中指定的值,它会删除数组中所有匹配的值。如何修改其中的一个值呢?可以先删除掉,再增加一个进去,还有就是直接定位修改。比如tags数组中,”Python”是第一个,想把它改成”python”,可以通过下标直接选择,就是tags[0],然后使用上面的”$set”等修改器,如果不确定可以使用$来定位:

1     >>> posts.update({"tags":"MongoDB"},{"$set":{"tags.$":"Hello"}})

这个将先搜索tags中满足”MongoDB”的,如果找到,就把它修改为”Hello”。可以看到上面的update这个函数已经有两个参数了,它还有第3个参数upsert,如果设为”True”,则如果没有找到匹配的文档,就会在匹配的基础上新建一个文档,具体实例就不讲了。

现在使用Python来插入,修改数据已经讲完,后面会继续讲解强大的查询功能和聚合功能。等待下一篇吧。

 

 

分享到:
评论

相关推荐

    Python与MongoDB是一种常见的搭配,增删改查案例

    Python与MongoDB是一种常见的搭配,因为Python拥有丰富的数据处理库和强大的社区支持,而MongoDB是一个流行的分布式文档型数据库,适合存储非结构化数据。Python的pymongo库使得开发者可以轻松地在Python应用中连接...

    Python操作redis和mongoDB的方法

    总结来说,Python与Redis的结合提供了高效的数据缓存机制,而Python与MongoDB的搭配则适合处理非结构化或半结构化的数据。了解和掌握这两种工具的Python操作方法,对于开发高效、灵活的数据驱动应用至关重要。在实际...

    film_review_project:使用Python和MongoDB的电影评论网站

    总之,【film_review_project】是一个全面的Web开发实践,涵盖了从需求分析到项目交付的全过程,为学习者提供了一个很好的实战案例,深入理解如何使用Python和MongoDB构建一个功能丰富的电影评论网站。

    NoSQL与Python学习.pdf

    Python作为一门广泛使用的编程语言,搭配Pymongo库,可以方便地与MongoDB进行交互。 Pymongo是MongoDB官方推荐的Python库,用于访问MongoDB数据库。通过Pymongo,Python程序员可以很容易地实现对MongoDB的连接、...

    cartoonDataShow:从各大动漫网站抓取到数据后存储在mongodb中,然后用python(flask)提供的路由和接口,在前端用react + echarts进行数据展示,数据的获取,可以搭配使用爬虫https:github .combuptyyfscrapy-cartoon

    cartoonDataShow从各大动漫网站抓取到数据后存储在mongodb中,然后用python(flask)提供的路由和接口,在前端用react + echarts进行数据展示运行环境python3.4,mongodb配置方法: Windows用户可以在目录下执行...

    基于python实现黑白棋游戏后端-源码

    8. **部署与运维**:最后,将游戏后端部署到服务器,可以选择使用`gunicorn`或`uWSGI`作为应用服务器,搭配`Nginx`作为反向代理和负载均衡。监控和日志管理也是运维的重要部分,可以使用`logging`库和第三方工具如`...

    Python基于Django的科研成果自动校验系统源码.zip

    • 使用 Scrapy 框架爬取论文信息,并论文数据存储于 MongoDB 中 • 利用 Celery 搭配 RabbitMQ,完成异步通信,提高 Web 页面吞吐量 • 通过 FuzzyWuzzy 计算搜索关键字与论文信息的综合匹配度,提升了搜索精度与...

    stock_linebot_public:Linebot项目

    使用python搭配flask框架,通过Heroku免费云端主机串接LineBot,资料库使用MongoDB 第三方库: twder(汇率) pymongo(数据库) imgurpython(Imgur Cloud) 财务 塔利卜 Heroku 注意: talib:目录底下的...

    个人发卡网平台搭建,结合虚拟资源自动化盈利

    常见的有PHP、Python、Java等后端语言,搭配MySQL或MongoDB等数据库系统,前端则通常使用HTML、CSS和JavaScript。框架方面,可以选择Laravel、Django或Spring Boot等,以提高开发效率。 2. **支付接口集成**:平台...

    webProject 项目源码(第二部分)

    开发时可能使用了Spring Boot或Django等框架,搭配MongoDB或PostgreSQL数据库。前端可能采用React或Vue.js,提供友好的用户体验。这个项目可以帮助我们深入理解考试系统的实现,以及前后端协同工作的机制。 企业...

    毕业设计是大数据分析与应用,这个项目准备做爬虫和分析两块。.zip

    在这个项目中,你可以使用Python的几个关键库,如BeautifulSoup、Scrapy或Requests+BeautifulSoup组合。BeautifulSoup擅长解析HTML和XML文档,可以方便地抽取所需的数据元素。Scrapy是一个完整的框架,适用于大型...

    8008123239曹文涛2309班电话信息管理系统.zip

    可能使用的关系型数据库如MySQL、SQLite或非关系型数据库如MongoDB,需要了解SQL查询语言进行数据操作。 2. **编程语言**:系统后端的开发可能使用Java、Python或C#等语言,这些语言都具有丰富的库和框架支持开发...

    爱心代码.zip

    如果涉及到用户界面,UI设计原则和用户体验(UX)设计是必不可少的,这可能包括颜色搭配、图标选择、布局设计等,以创造友好且易于使用的界面。 此外,代码管理和版本控制工具,如Git,会用来协同开发和追踪改动。...

    芝麻开门博客网.zip

    了解如何使用数据库(如MySQL、MongoDB)存储和检索数据,以及如何实现API接口供前端调用。 3. **前端框架**:利用React、Vue或Angular等现代前端框架,提升开发效率和用户体验。理解组件化开发思想,掌握状态管理...

    Goberl友情链接系统源码_goberllink.zip

    【技术栈】虽然具体使用哪种编程语言和技术栈未在标签中给出,但常见的实现方式可能是使用PHP搭配MySQL数据库,或者使用Node.js搭配MongoDB等NoSQL数据库。源码中可能包含了框架的使用,比如Laravel、Django或...

    课程设计买卖网站源代码及使用说明书

    常见的数据库管理系统如MySQL、SQLite、MongoDB等,它们用于存储和检索网站所需的数据。 3. **框架与库**:为了提高开发效率,开发者通常会使用Web框架,如Django(Python)、Laravel(PHP)或Express(Node.js)。...

    《前后》教学设计公开课2.pdf

    常见的后端编程语言有Java、Python、Node.js、Ruby等,搭配数据库如MySQL、MongoDB、PostgreSQL等进行数据操作。后端开发者需要理解RESTful API设计原则,以便与前端进行有效通信。 在前后端交互中,通常通过HTTP或...

    微信小程序案例之AppleMusicartand.zip

    开发者可能使用了诸如Node.js、Java、Python等服务器端语言,搭配MongoDB、MySQL等数据库系统,构建出稳定、高效的后台服务。通过API(应用程序接口)与微信小程序进行通信,实现数据的获取、更新和删除等功能。例如...

    看书阅读带后端.rar

    一般采用Node.js、Python、Java等语言构建,搭配Express、Django、Spring Boot等框架实现。此实例未具体说明后端技术栈,但通常会涉及数据库(如MySQL、MongoDB)、API设计(RESTful API)和服务器部署(如AWS、阿里...

    memcache缓存

    因此,有些场景下会选择搭配Redis等支持持久化的缓存系统使用。 **5. 优化策略** - **缓存策略**:根据业务场景选择合适的缓存策略,如预加载、定时刷新等,以保证数据的时效性。 - **内存分配**:合理设置...

Global site tag (gtag.js) - Google Analytics