@Dukebf
2017-07-12T00:09:39.000000Z
字数 2724
阅读 2394
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 MongoClient
client = MongoClient()
client.drop_database('db_name')
方式和获取数据库时相同:
>>> collectinn = db.test_collection
加引号的形式
>>> collection = db['test_collection']
如果表不存在,则创建新表.
创建带有引用的表,可以参考官网操作更详细的操作
创建一个contacts
的collection,设置活动地点
from pymongo import MongoClient
from pymongo.collation import Collation
db = MongoClient().test
collection = 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 MongoClient
def test():
num = 3
db = MongoClient().db
posts = db.posts
data = 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 MongoClient
from datetime import datetime,timedelta
expires = timedelta(days=1)
db = MongoClient().db
db.posts.create_index(['timestamp',pymongo.ASCENDING],expireAfterSeconds(expires.total_seconds())
# 也可以指定秒
e2 = timedelta(seconds=5)
# db.posts. ... (e2.total_seconds())