@Dukebf
2017-07-11T16:09:39.000000Z
字数 2724
阅读 2604
pymongo mongodb
>>> from pymongo import MongoClient>>> client = MongoClient()
指定主机和端口
>>> client = MongoClient('localhost',27017)
使用 MongoDB URI 格式化
>>> client = MongoClient('mongodb://localhost:27017/')
直接指定数据库名字
>>> db = client.test_database
如果无法直接指定,可以用引号的方式
>>> db = client['test_database']
上面两种方法都可以获取到数据库,如果数据库不存在,则以该名字创建一个新的数据库.
from pymongo import MongoClientclient = MongoClient()client.drop_database('db_name')
方式和获取数据库时相同:
>>> collectinn = db.test_collection
加引号的形式
>>> collection = db['test_collection']
如果表不存在,则创建新表.
创建带有引用的表,可以参考官网操作更详细的操作
创建一个contacts的collection,设置活动地点
from pymongo import MongoClientfrom pymongo.collation import Collationdb = MongoClient().testcollection = db.create_collection('contacts,collation=Collation(locale='fr_CA'))
假设数据库为 db,表的名字为 posts,
插入时,只需要指定表的名字
>>> post = {'author':'Duke'}>>> posts = db.posts>>> posts.insert_one(post)
获取刚插入的数据的id
>>> post_id = posts.insert_one(post).inserted_id>> post_id
插入多条数据,插入时,可以直接用db.posts这样指定表的名字
>>> new_posts = [{'author':'one'},{'author':'two'}]>>> db.posts.insert_many(new_posts)<pymongo.results.InsertManyResult object at 0x7fa9246f0ca8>
查找一条数据,返回字符串
>>> posts.find_one()
查找多条数据,会返回一个浮标对象
可以通过limit(num)限定查找 num 条数据
可以通过skip(num) 跳过前面 num 条数据
from pymongo import MongoClientdef test():num = 3db = MongoClient().dbposts = db.postsdata = posts.find()data2 = posts.find().limit(num)data3 = posts.find().limit(num).skip(num)return data # 浮标对象
可以通过将数据加入到列表中再返回,这时就是一个列表对象
data = posts.find()record = []for item in data:record.append(item)return record
有关约束查找,可以参考这篇文章
account.find({ "$or": [ { "title": {"$regex": 'test'} }, { "intro": {"$regex": 'test'} } ] })
方法1.import re{'xxx':re.compile('xxx')}方法2.{'xxx':{'$regex':'xxx'}
基本操作,使用mongodb的操作方法update(),详细可以参考菜鸟教程的方法
new_author = {'author':'Duke2'}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')
from pymongo import MongoClientfrom datetime import datetime,timedeltaexpires = timedelta(days=1)db = MongoClient().dbdb.posts.create_index(['timestamp',pymongo.ASCENDING],expireAfterSeconds(expires.total_seconds())# 也可以指定秒e2 = timedelta(seconds=5)# db.posts. ... (e2.total_seconds())