关于mongodb这里就不再介绍了,本文主要基于pymongo-2.6.3版本
- 下载安装
- 从一个例子开始
下面的例子展示了一个简单的使用:连接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
- 模块介绍
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则会抛出错误