Python3中PyMongo使用举例

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fengbingchun/article/details/89069165

MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,与平台无关,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

在Python中操作MongoDB可以使用PyMongo,在ubuntu上安装PyMongo,执行:$ python3 -m pip install pymongo ,结果如下图所示:

在ubuntu上安装MongoDB,执行:$ sudo apt-get install mongodb ,这样在14.04上默认安装的是2.4.9版本,安装完后默认启动服务,但是之前我们安装pymongo时是3.7.2版本,这样导致pymongo与mongo不匹配,即出现” pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 0, but this version of PyMongo requires at least 2 (MongoDB 2.6).”的错误,解决方法可以是降低pymongo的版本,或者升级mongo的版本。在ubuntu安装高版本的mongodb可以参考:https://docs.mongodb.com/v2.6/tutorial/install-mongodb-on-ubuntu/ ,这里为了简便,降低pymongo的版本,从3.7.2降低到3.4.0,执行命令:conda install pymongo=3.4.0 。

测试代码如下:

import pymongo

'''
reference:
	https://juejin.im/post/5addbd0e518825671f2f62ee
	http://www.runoob.com/python3/python-mongodb.html
	https://blog.csdn.net/xsdxs/article/details/52565489
'''

def print_results(description, results):
	strs = description + " type:"
	print(strs, type(results))
	description += ":"
	if (isinstance(results, dict)):
		print(description, results)
	else: 
		for result in results:
			print(description, result)

if __name__ == "__main__":
	print("pymongo version:", pymongo.version)

	client = pymongo.MongoClient(host='localhost', port=27017) # mongodb默认端口是27017
	print("connection successed:", client.server_info()) # 判断是否连接成功

	db = client.test # 指定test数据库, 如果没有则会自动创建
	collection = db.students # 每个数据库又包含许多集合
	student1 = {'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
	result = collection.insert_one(student1) # 在students集合中插入一条学生数据
	print("insert result:", result)

	student2 = {'id': '20170102', 'name': 'Tom', 'age': 21, 'gender': 'male'}
	student3 = {'id': '20170203', 'name': 'Mike', 'age': 22, 'gender': 'male'}
	result = collection.insert_many([student2, student3]) # 在students集合中插入多条学生数据
	print("many insert result:", result)

	result = collection.find_one({"name": "Tom"}) # 查询单个结果
	print_results("find one result", result)

	results = collection.find({"age": 20}) # 查询多个结果
	print_results("find many results", results)

	results = collection.find({"age": {"$gt": 20}}) # 查询年龄大于20的多个结果
	print_results("find age > 20 many results", results)

	count = collection.find({"age": 20}).count() # 查询计数
	print("find result count:", count)

	result = collection.delete_one({"age": 21}) # 删除一条数据
	print("delete one result:", result)
	print("delete one result count:", result.deleted_count)

	results = collection.delete_many({"age": {"$gte": 21}})
	print("delete many results:", results)
	print("delete many results count", results.deleted_count)

	condition = {"name": "Jordan"}
	student = collection.find_one(condition)
	#print_results("find one result", student)
	student["age"] = 25
	result = collection.update(condition, student) # 更新一条数据
	print("update result:", result)

	print("db collection names:", db.collection_names()) # 查看test数据库下所有表名称

	dblist = client.database_names() # 获取mongodb下所有数据库
	print("db list names:", dblist)

执行结果如下:

GitHubhttps://github.com/fengbingchun/Python_Test

猜你喜欢

转载自blog.csdn.net/fengbingchun/article/details/89069165
今日推荐