本文共 3633 字,大约阅读时间需要 12 分钟。
安装Python的MongoDB模块PyMongo
下载地址:
解压安装包,进入解压目录执行安装命令
python setup.py install
pip install pymongo
easy_install pymongo
>>> Import pymongo
>>> 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'
本文转自cqtesting51CTO博客,原文链接:
http://blog.51cto.com/cqtesting/2071144 ,如需转载请自行联系原作者