In addition to Weibo, there is also WeChat
Please pay attention
WeChat public account
Shulou
2025-01-17 Update From: SLTechnology News&Howtos shulou NAV: SLTechnology News&Howtos > Database >
Share
Shulou(Shulou.com)06/01 Report--
Python 可以使用 pymongo 库方便的操作 MongoDB 。插播一句,MongoDB 不同于关系型结构的三层结构--database--> table --> record,它的层级为 database -->collection --> document 。这里不重点介绍 MongoDB 用法,主要来看一下如何用 Python 使用 MongoDB。
1.安装MongoDB和pymongo:
[root@localhost ~]# pip install pymongo[root@localhost ~]# yum install -y mongodb-server
启动 MongoDB ,其中 --dbpath 指定数据存放目录,默认为 /data/db ,如果目录不存在会报错; --logpath 指定日志输出文件,日志会按照时间自动切分:
[root@localhost ~]# mongod --dbpath=/data/mongodb/db/--logpath=/data/mongodb/mongodb.log
注:如果没有 pip 命令,需要使用 yum 进行安装:
[root@localhost ~]# yum install -y python-pip
2.建立连接:
[root@localhost ~]# python>>> from pymongo import *>>> client = MongoClient() //与以下两种方式等同>>> client = MongoClient("localhost", 27017)>>> client = MongoClient("mongodb://localhost:27017/")
3.指定将要进行操作的database和collection:
>>> db = client.test_db>>> collection = db.test_collection
4.常规操作:
4.1 插入:
>>> mydict = {"name":"Lucy", "sex":"female","job":"nurse"}>>> collection.insert(mydict)>>> collection.insert_one(mydict)>>> collection.insert_many(mydict) //会报错,.insert_many()时参数必须为 list 形式,做如下包装:>>> mylist = []>>> mylist.append(mydict)>>> collection.insert_many(mylist) //不会报错
4.2 查询:
.find_one() 显示满足条件的第一个 collection,find() 的结果则是一个满足条件的对象数组:
>>> collection.find({"name":"Lucy"})[0]>>> collection.find({"name":"Lucy"})[1]……
可以使用 for-in 循环进行查看:
>>> for i in collection.find({"name":"Lucy"})… print i…{u'job': u'nurse', u'_id': ObjectId('554bd2e1e1382306bba8ade9'),u'name': u'Lucy', u'sex': u'female'}{u'nationality': u'US', u'age': 24, u'_id': ObjectId('554be1cce138230714d0ab0d'),u'name': u'Lucy'}
查询指定条件的collection,可以指定一个或多个条件:
>>> collection.find_one({"name":"Lucy"})>>> collection.find_one({"name":"Lucy", "sex":"female"})
.count() 统计结果总条数:
>>> collection.find().count() //等同于collection.count()>>> collection.find({"name":"Lucy"}).count()
指定大于小于等于等条件进行查询:
>>> collection.find({"age": {"$lt": 30}})
这样的查询符号有 $lt(小于), $gt(大于), $lte(小于等于), $gte(大于等于), $ne(不等于),这与原生 MongoDB 中相同。
将查询结果按条件排序:
>>> collection.find().sort("age") //默认,升序>>> collection.find().sort("age", pymongo.ASCENDING) //升序>>> collection.find().sort("age", pymongo.DESCENDING) //降序
查询 database中所有collection :
>>> db.collection_names()>>> db.collection_names(include_system_collections=Flase) //不包括系统collection,一般指的是system.indexes
注:这里的 db 为建立连接后的db = client.test_db 。
4.3 更新:
>>> temp = collection.find_one({"name":"Lucy"})>>> temp2 = temp.copy()>>> temp["name"] = "Jordan">>> collection.save(temp) //或 .update() ,注意参数形式>>> collection.update(temp, temp2) //将temp更新为temp2
注:如果此时temp["_id"]在该collection中已经存在,则.save()为更新操作,与 .replace_one() 作用相同,否则 .save() 为插入操作,与 .insert_one() 作用相同。
还要注意的一点是,.replace_one()需要传入两个参数,分别为当前document和要更新为的 document ,与 .update() 相同(update和save的区别暂且略过,有兴趣可以搜索引擎一下):
>>> collection.replace_one(old_document, new_document)
4.4 删除:
>>> collection.remove(temp)//即便该temp不存在也不会报错>>> collection.delete_one(temp)>>> collection.delete_many(temp) //与 .insert_many() 不同,在temp不是list类型时也不会报错
补充:
1.JSON序列化与反序列化:
如果想序列化为标准 JSON 格式,两种方式,方式一,json 包中的 dumps:
>>> import json>>> for i in collection.find("{"name":"Lucy"})… del i["_id"] //不能直接转换,无法识别ObjectId… json.dumps(i)
对应的反序列化方法为json.loads()
方式二,bson.json_util包中封装的 dumps:
>>> from bson import Binary, Code>>> from bson.json_util import dumps>>> dumps([{'foo': [1, 2]},... {'bar': {'hello':'world'}},... {'code': Code("function x() { return1; }")},... {'bin': Binary("")}])'[{"foo": [1, 2]}, {"bar": {"hello":"world"}}, {"code": {"$code": "function x(){ return 1; }", "$scope": {}}}, {"bin":{"$binary": "", "$type": "00"}}]'
对应的反序列化方法为bson.json_util.loads()
2.Deprecated与"Modern":
在pymongo中,有一些方法虽然没有被弃用,但也已经不再建议使用,使用这些方法不会出现 error ,但会报出 warning :
__main__:1:DeprecationWarning: insert is deprecated. Use insert_one or insert_manyinstead.
下面列出一些Deprecated Method 和 "Mordern" Method ,供了解(建议不要使用 Deprecated Method,因为没准哪天就真的被弃用了):
Deprecated "Mordern"
insert insert_one insert_many
save replace_one insert_one
remove delete_one delete_many
update replace_one update_one update_many
参考资料:
http://api.mongodb.org/python/current/tutorial.html
http://api.mongodb.org/python/current/api/bson/json_util.html
Welcome to subscribe "Shulou Technology Information " to get latest news, interesting things and hot topics in the IT industry, and controls the hottest and latest Internet news, technology news and IT industry trends.
Views: 0
*The comments in the above article only represent the author's personal views and do not represent the views and positions of this website. If you have more insights, please feel free to contribute and share.
Continue with the installation of the previous hadoop.First, install zookooper1. Decompress zookoope
"Every 5-10 years, there's a rare product, a really special, very unusual product that's the most un
© 2024 shulou.com SLNews company. All rights reserved.