Python mongodb python

关于mongodb这里就不再介绍了,本文主要基于pymongo-2.6.3版本

  1. 下载安装
  1. 从一个例子开始

下面的例子展示了一个简单的使用:连接mongo,获取db和colletion并插入一条记录

from pymongo import Connection
from pymongo.errors import ConnectionFailure

def mongo_connection():
	try:
		# 创建一个连接
		con = Connection('localhost', 27017)
		# 获取一个数据库
		db = con.sa
		# 获取collection
		coll_user = db.user
		user = {'name':'python', 'version':'1.2.4'}
		# 新增一条记录
		coll_user.insert(user)
		# 关闭连接
		con.close()
	except TypeError , e:
		print e
	except ConnectionFailure , e:
		print e

上面的注释已经把各个功能做了介绍。这里连接数据库主要用到了Connection,我们可以从api中看到相关的参数 Connection([host='localhost'[, port=27017[, max_pool_size=10[, network_timeout=None[, document_class=dict[, tz_aware=False[, **kwargs]]]]]]])更详细的参数见上面api文档。同时我们也可以看到,这个方法在当前版本已经被过期了。推荐使用MongoClient。那么上面的例子可以变成:

from pymongo import MongoClient
from pymongo.errors import ConnectionFailure

def mongo_client():
	try:
		client = MongoClient('localhost', 27017)
		db = client.sa
		coll_user = db.user
		user = {'name':'pymongo', 'version':'2.6.3'}
		coll_user.insert(user)
		client.close()
	except TypeError , e:
		print e
	except ConnectionFailure , e:
		print e
  1. 模块介绍

pymongo主要涉及以下几个模块

connection表示了一个mongodb的连接,上面已经描述了构造方法,下面介绍一些 常用的属性和方法

c[db_name]||c.db_name获取一个数据库实例,如`con['sample']`或者`con.sample`
con.host,con.port,con.max_pool_size,con.nodes显示当前连接的常见属性
con.server_info()显示当前连接mongodb的基本信息
database_names(),con.get_default_database()当前连接的所有数据库名称
drop_database(name_or_database)删除一个数据库
con.copy_database(from_name, to_name[, from_host=None[, username=None[, password=None]]])拷贝一个数据库到另一个
con.write_concern()用于连接的一些设置,可设置replica的属性:`con.write_concern = {'w': 2, 'wtimeout': 1000,'j':True,'fsync':True}`

database:表示了当前连接的一个数据库。对数据库实例而言,最重要的是获取相应的文档对象并进行后续的操作。当然也提供了相关的方法:如用户管理、文档操作等

db[collection_name] || db.collection_name根据名字获取collection
add_user(name, password=None, read_only=None, **kwargs)对当前数据库新增用户
authenticate(name, password=None, source=None, mechanism='MONGODB-CR', **kwargs)对当前数据库进行授权
remove_user(name)删除用户
collection_names(include_system_collections=True)获取当前数据库所有的collections
create_collection(name, **kwargs)创建一个新的collection
drop_collection(name_or_collection)删除一个collection

collection这应该是我们操作mongodb中最常关注的对象,我们进行的一切增、删、改、查都在这个类体现。下面用几个例子来说明

def mongo_insert_save():
	try:
		client = MongoClient('localhost', 27017)
		db = client['sample']
		colle_book = db['book']
		book = {'name':'pymongo', 'version':'2.6.3'}
		#新增文档对象
		colle_book.insert(book)
		print book
		
		#更新文档
		book['price'] = 1.2
		colle_book.save(book)
		print book
		
		#此处会抛出`DuplicateKeyError`
		colle_book.insert(book)
		
		#批了插入的操作
		books = []
		for i in range(10):
			books.append({'name':'pymongo_' + str(i), 'version':'ver_' + str(i)})
		colle_book.insert(books)  

	except TypeError , e:
		print e
	except ConnectionFailure , e:
		print e 

这里用到了insert()save()。一个完整的函数参数为:insert(doc_or_docs[, manipulate=True[, safe=None[, check_keys=True[, continue_on_error=False[, **kwargs]]]]])这里两者的区别在于: 如果一个文档对象如果有_id在调用save时将更新而insert则会抛出错误



blog comments powered by Disqus