[关闭]
@Dukebf 2017-07-11T16:09:39.000000Z 字数 2724 阅读 2290

pymongo 基本使用

pymongo mongodb


前人轮子
pymongo 3.4 document
Python的MongoDB模块PyMongo操作方法集锦

目录

基本教程

获取或者创建表

  1. >>> from pymongo import MongoClient
  2. >>> client = MongoClient()

指定主机和端口

  1. >>> client = MongoClient('localhost',27017)

使用 MongoDB URI 格式化

  1. >>> client = MongoClient('mongodb://localhost:27017/')

获取或创建数据库

直接指定数据库名字

  1. >>> db = client.test_database

如果无法直接指定,可以用引号的方式

  1. >>> db = client['test_database']

上面两种方法都可以获取到数据库,如果数据库不存在,则以该名字创建一个新的数据库.

删除数据库

  1. from pymongo import MongoClient
  2. client = MongoClient()
  3. client.drop_database('db_name')

获取或者创建表

方式和获取数据库时相同:

  1. >>> collectinn = db.test_collection

加引号的形式

  1. >>> collection = db['test_collection']

如果表不存在,则创建新表.

创建带有引用的表,可以参考官网操作更详细的操作
创建一个contacts的collection,设置活动地点

  1. from pymongo import MongoClient
  2. from pymongo.collation import Collation
  3. db = MongoClient().test
  4. collection = db.create_collection('contacts,collation=Collation(locale='fr_CA'))

插入数据

假设数据库为 db,表的名字为 posts,
插入时,只需要指定表的名字

  1. >>> post = {'author':'Duke'}
  2. >>> posts = db.posts
  3. >>> posts.insert_one(post)

获取刚插入的数据的id

  1. >>> post_id = posts.insert_one(post).inserted_id
  2. >> post_id

插入多条数据,插入时,可以直接用db.posts这样指定表的名字

  1. >>> new_posts = [{'author':'one'},{'author':'two'}]
  2. >>> db.posts.insert_many(new_posts)
  3. <pymongo.results.InsertManyResult object at 0x7fa9246f0ca8>

查找数据

查找一条数据,返回字符串

  1. >>> posts.find_one()

查找多条数据,会返回一个浮标对象
可以通过limit(num)限定查找 num 条数据
可以通过skip(num) 跳过前面 num 条数据

  1. from pymongo import MongoClient
  2. def test():
  3. num = 3
  4. db = MongoClient().db
  5. posts = db.posts
  6. data = posts.find()
  7. data2 = posts.find().limit(num)
  8. data3 = posts.find().limit(num).skip(num)
  9. return data # 浮标对象

可以通过将数据加入到列表中再返回,这时就是一个列表对象

  1. data = posts.find()
  2. record = []
  3. for item in data:
  4. record.append(item)
  5. return record

有关约束查找,可以参考这篇文章

and 和 or 查询

  1. account.find({ "$or": [ { "title": {"$regex": 'test'} }, { "intro": {"$regex": 'test'} } ] })

不区分大小写查询,正则匹配

  1. 方法1.
  2. import re
  3. {'xxx':re.compile('xxx')}
  4. 方法2.
  5. {'xxx':{'$regex':'xxx'}

更新文档

基本操作,使用mongodb的操作方法update(),详细可以参考菜鸟教程的方法

  1. new_author = {'author':'Duke2'}
  2. db.posts.update({'author':'Duke'},{'$set':new_author},upsert=True)

upsert 参数表示如果表中没有文档,是否新插入当前更新的文档
此外,pymongo 中有自己的方法:

update_one(filter,update,upsert=False)
update_many(filter,update,upsert=False)
replace_one(filter,replacement,upsert=False)
find_one_and_update(filter,update,projection=None,sort=None,return_document=ReturnDocument.BEFORE,**kwargs)

看了参数还不知道怎么使用的,详细使用方法可以参考源码,或者网上的一些文章,如: pymongo 常用操作函数

创建索引,并定期删除

pymongo 中创建索引的函数( creat_index() )有区别于原生Mongodb的函数( ensure_index() ).

expireAfterSeconds 是创建索引中带有的一个参数,可以指定文档的有效时间,过期了则自动删除

timedelta() 是一个可以转换时间的函数

pymongo.ASCENDI,pymongo.DESCENDING 指定升序降序,也可以不指定, creat_index('timestamp')

  1. from pymongo import MongoClient
  2. from datetime import datetime,timedelta
  3. expires = timedelta(days=1)
  4. db = MongoClient().db
  5. db.posts.create_index(['timestamp',pymongo.ASCENDING],expireAfterSeconds(expires.total_seconds())
  6. # 也可以指定秒
  7. e2 = timedelta(seconds=5)
  8. # db.posts. ... (e2.total_seconds())
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注