设为首页 收藏本站
查看: 1084|回复: 0

[经验分享] python学习笔记操作mongodb(九)

[复制链接]

尚未签到

发表于 2018-8-10 11:14:05 | 显示全部楼层 |阅读模式
一、安装Pymongo
  安装Python的MongoDB模块PyMongo


  • 源码安装:
  下载地址:
  https://pypi.python.org/packages/69/8a/2384c55f4bd494eeb6104a9b35c36714ba1178dcd08ee5a73b92eed3d8c1/pymongo-3.6.0.tar.gz#md5=2f64fa7691c77535b72050704cc12afb
  解压安装包,进入解压目录执行安装命令
  python setup.py install


  • pip安装
  pip install pymongo
  或者
  easy_install pymongo

二、使用Pymongo操作Mongodb


  • 导入模块
  >>> Import pymongo


  • 建立MongodbClient的连接
  >>> client = pymongo.MongoClient("localhost",27017)
  或者
  >>> client = pymongo.MongoClient(“mongodb://localhost:27017/”)


  • 得到数据库
  

db=client.mydb  
或者
  
db=client[“mydb”]
  


  • 得到集合
  

books=db.my_collection  
或者
  
books=db[“my_collection”]
  

  查询
  查询一条数据,使用find_one():
  

>>> books.find_one()  
{u'lang': u'Python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}
  

  查询所有数据,使用find():
  

>>> for i in books.find():  
...     print i
  
...
  
{u'lang': u'Python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}
  
{u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'}
  

  在 books 引用的对象中有 find() 方法,它返回的是一个可迭代对象,包含着集合中所有的文档。
  条件查询:
  

>>> books.find_one(“lang”:”Python”)  
{u'lang': u'Python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}
  

  查询结果排序:
  

>>> for i in books.find().sort("title", pymongo.ASCENDING):  
...     print i
  
...
  
{u'lang': u'python', u'_id': ObjectId('554f0e3cf579bc0767db9edf'), u'author': u'qiwsir', u'title': u'from beginner to master'}
  
{u'lang': u'english', u'title': u'physics', u'_id': ObjectId('554f28f465db941152e6df8b'), u'author': u'Newton'}
  

  这是按照"title"的值的升序排列的,注意 sort() 中的第二个参数,意思是升序排列。如果按照降序,就需要将参数修改为 Pymongo.DESCEDING,也可以指定多个排序键。
  统计文档数
  

>>> books.find().count()  
2
  

  当前有2条数据
  mongodb 中的每个文档,本质上都是“键值对”的类字典结构。这种结构,一经 Python 读出来,就可以用字典中的各种方法来操作。与此类似的还有一个名为 json 的东西,可以阅读本教程第贰季进阶的第陆章模块中的《标准库(8)。但是,如果用 Python 读过来之后,无法直接用 json 模块中的 json.dumps() 方法操作文档。其中一种解决方法就是将文档中的'_id'键值对删除(例如:del doc['_id']),然后使用 json.dumps() 即可。读者也可是使用 json_util 模块,因为它是“Tools for using Python’s json module with BSON documents”,请阅读http://api.mongodb.org/Python/current/api/bson/json_util.html中的模块使用说明。
  插入数据
  插入1条数据:
  

>>> b2 = {"title":"physics", "author":"Newton", "lang":"english"}  
>>> books.insert(b2)
  
ObjectId('554f28f465db941152e6df8b')
  

  批量插入数据:
  

>>> n1 = {"title":"java", "name":"Bush"}  
>>> n2 = {"title":"fortran", "name":"John Warner Backus"}
  
>>> n3 = {"title":"lisp", "name":"John McCarthy"}
  
>>> n = [n1, n2, n3]
  
>>> n
  
[{'name': 'Bush', 'title': 'java'}, {'name': 'John Warner Backus', 'title': 'fortran'}, {'name': 'John McCarthy', 'title': 'lisp'}]
  
>>> books.insert(n)
  
[ObjectId('554f30be65db941152e6df8d'), ObjectId('554f30be65db941152e6df8e'), ObjectId('554f30be65db941152e6df8f')]
  

  更新
  对于已有数据,进行更新,是数据库中常用的操作。比如,要更新 name 为 Hertz 那个文档:
  

>>> books.update({"name":"Hertz"}, {"$set": {"title":"new physics", "author":"Hertz"}})  
{u'updatedExisting': True, u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1}
  
>>> books.find_one({"author":"Hertz"})
  
{u'title': u'new physics', u'_id': ObjectId('554f2b4565db941152e6df8c'), u'name': u'Hertz', u'author': u'Hertz'}
  

  在更新的时候,用了一个 $set 修改器,它可以用来指定键值,如果键不存在,就会创建。
  关于修改器,不仅仅是这一个,还有别的呢。

修改器
描述
$set
用来指定一个键的值。如果不存在则创建它
$unset
完全删除某个键
$inc
增加已有键的值,不存在则创建(只能用于增加整数、长整数、双精度浮点数)
$push
数组修改器只能操作值为数组,存在 key 在值末尾增加一个元素,不存在则创建一个数组  删除
  删除可以用 remove() 方法:
  

>>> books.remove({"name":"Bush"})  
{u'connectionId': 4, u'ok': 1.0, u'err': None, u'n': 1}
  
>>> books.find_one({"name":"Bush"})
  
>>>
  

  这是将那个文档全部删除。当然,也可以根据 mongodb 的语法规则,写个条件,按照条件删除。
  索引
  索引的目的是为了让查询速度更快,当然,在具体的项目开发中,要视情况而定是否建立索引。因为建立索引也是有代价的。
  

>>> books.create_index([("title", pymongo.DESCENDING),])  
u'title_-1'

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-549605-1-1.html 上篇帖子: anaconda Python2安装包报错 下篇帖子: Python 数据库的Connection、Cursor两大对象
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表