笔记-python lib-pymongo
笔记-python lib-pymongo
1. 开始
pymongo是python版的连接库,最新版为3.7.2。
文档地址:https://pypi.org/project/pymongo/
使用文档:http://api.mongodb.com/python/current/tutorial.html
The PyMongo distribution contains tools for interacting with MongoDB database from Python. The bsonpackage is an implementation of the BSON format for Python. The pymongo package is a native Python driver for MongoDB. The gridfs package is a gridfs implementation on top of pymongo.
PyMongo supports MongoDB 2.6, 3.0, 3.2, 3.4, 3.6 and 4.0.
1.1. 安装
python –m pip isntall pymongo
1.2. 问题
使用ip始终连接不上,可能是在mongodb的设置中被绑定到127.0.0.1上了,使用localhost连接成功。
1.3. 常用操作
# pymongodb 常用操作
import pymongo
import time
import string
# 数据库相关信息
mongodb_info = ['192.168.199.113', 27017]
# 1. connect to mongodb,get database, get collection
"""
连接MongoDB我们需要使用PyMongo库里面的MongoClient,一般来说传入MongoDB的IP及端口即可,第一个参数为地址host,
第二个参数为端口port,端口如果不传默认是27017。
client = MongoClient('localhost', 27017)
第一个参数还可以传mongodb的连接字符串,
client = MongoClient('mongodb://localhost:27017/')可以达到同样的连接效果。
"""
conn = pymongo.MongoClient('localhost')
# 指明database,如果不存在则创建
# 也可以写为db = conn['test_database']
db = conn.test_database
# db1 = conn.a仅代表a而不代表a所指向的变量,下面会创建名为a的database而非aaa
#a = 'aaa'
#db1 = conn.a
# 指定collection
# 在指定collection名时也是如此,下面的语句会创建a而不是aaa
# 类似的,也可以写作coll = db['a']
coll = db.a
coll_test = db.test
#coll.insert({'rt':452423})
'''
# 3.集合管理
# 新增一个集合a
new_coll = db.a
# 注意,这时并没有创建集合,只有在插入数据时才会创建
# 删除集合
coll_2 = db.test_delete
result = coll_2.insert({'delete_test':'delete the collection'})
print(result)
db.drop_collection('test_delete')
# 查询所有集合
db_coll_name = db.collection_names(include_system_collections=False)
print(db_coll_name)
'''
# 实验环境创建
'''
chars = string.ascii_lowercase
li = [{chars[x]:x} for x in range(26)]
print(li)
coll_test = db.test
db.drop_collection('test')
coll_test.insert_one({'x':6}) # 自动生成_id
for i,j in enumerate(li):
coll_test.insert_one({'_id':i,**j}) # 指定_id
'''
'''
# 4. 数据操作
# 插入,每条数据有一个_id属性来唯一标识,如果没有显示指定,mongodb会自动生成一个
# 重复执行多次会插入多次
# insert 会返回_id
result = coll.insert({'key1':'sam','key2':'jack'})
print(result)
# 一次插入多条记录,记录以列表方式组织,列表每个元素代表一个记录
# 返回的结果是对应的_id的集合
# 在3.0版以后,官方推荐使用insert_one() and insert_many(),当然insert()也可以继续使用
#result = collection.insert([student1, student2])
# insert_one()
# 它返回的是一个pymongo.results.InsertOneResult对象,可以使用inserted_id获取_id
result = coll.insert_one({'insert_one':'1'})
print(result)
print(result.inserted_id)
# insert_many()
#
# 2.2 删除document
# 老版本的是remove,新版推荐使用delete_one
# 删除一个文档,如果该文档不存在,不会报错
# 没有指定参数则会删除前面的一个文档
print(coll_test.count_documents({}))
result = coll_test.delete_one({})
print(result.deleted_count)
# delete_many()
# 删除所有符合条件的文档
# 另外PyMongo还提供了一些组合方法,如find_one_and_delete()、find_one_and_replace()、find_one_and_update(),
# 就是查找后删除、替换、更新操作,用法与上述方法基本一致。
'''
# 2.3 修改
item = coll_test.find_one({'a':100})
print(item)
item['a'] = 200
result = coll_test.update({'a':100},item)
#result = coll_test.find_one_and_replace({'a':0},{'a':100})
print(result)
# 输出:{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}
# 返回结果是字典形式,ok即代表执行成功,nModified代表影响的数据条数。
# 另外update()方法其实也是官方不推荐使用的方法,在这里也分了update_one()方法和update_many()方法,用法更加严格,
'''
# 2.4 查
# 集合数据
# 统计集合中文档的数量
# count_documents({})
doc_nums = coll.count_documents({})
print(doc_nums)
# 2.4.2 查询文档
# find_one() 获取一个collection
# 返回字典
# {'_id': ObjectId('5c162016e771231e84d078bf'), 'key1': 'sam', 'key2': 'jack'}
# _id是自动添加的字段
result = coll.find_one({'key1':'sam'})
# find()获取多个document 返回一个cursor对象
result = coll.find()
print(result) # <pymongo.cursor.Cursor object at 0x000000A566BD8C18>
# 打印所有满足条件的document
for _ in coll.find():
# print(type(_)) # <class 'dict'>
print(_)
# 根据objectid查询
# 注意,系统自动生成的id是一个对象而不是字符串
id = '5c162008e771231f0c96c0fa'
result = coll.find_one({'_id':id})
# 做一下类型转换
from bson.objectid import ObjectId
result = coll.find_one({'_id':ObjectId('5c162008e771231f0c96c0fa')})
print(result)
# 如果自己给定了_id 当然可以了
result = coll_test.find_one({'_id':4})
print(result)
# 条件查询
#d = [{'name':'a','age':15},{'name':'b','age':18},{'name':'c','age':23},{'name':'d','age':33}]
#coll_test.insert_many(d)
# 各数据库差不多,注意语法即可
result = coll_test.find({'age':{'$lt':20}})
print(list(result))
# 在这里将比较符号归纳如下表:
"""
符号含义示例
$lt小于{'age': {'$lt': 20}}
$gt大于{'age': {'$gt': 20}}
$lte小于等于{'age': {'$lte': 20}}
$gte大于等于{'age': {'$gte': 20}}
$ne不等于{'age': {'$ne': 20}}
$in在范围内{'age': {'$in': [20, 23]}}
$nin不在范围内{'age': {'$nin': [20, 23]}}
"""
# 正则也可以
results = collection.find({'name': {'$regex': '^M.*'}})
# 在这里使用了$regex来指定正则匹配,^M.*代表以M开头的正则表达式,这样就可以查询所有符合该正则的结果。
# 在这里将一些功能符号再归类如下:
"""
符号含义示例示例含义
$regex匹配正则{'name': {'$regex': '^M.*'}}name以M开头
$exists属性是否存在{'name': {'$exists': True}}name属性存在
$type类型判断{'age': {'$type': 'int'}}age的类型为int
$mod数字模操作{'age': {'$mod': [5, 0]}}年龄模5余0
$text文本查询{'$text': {'$search': 'Mike'}}text类型的属性中包含Mike字符串
$where高级条件查询{'$where': 'obj.fans_count == obj.follows_count'}自身粉丝数等于关注数
"""
# 这些操作的更详细用法在可以在MongoDB官方文档找到:
# https://docs.mongodb.com/manual/reference/operator/query/
# 计数
count = coll_test.find().count()
print(count)
print(coll_test.count_documents({}))
# 排序
result = coll_test.find().sort('name',pymongo.ASCENDING)
print(list(result))
'''
笔记-python lib-pymongo的更多相关文章
- Python 使用pymongo操作mongodb库
Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报 分类: - - - Python(10) 版权声明:本文为博主原创文 ...
- 笔记-python -asynio
笔记-python -asynio 1. 简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...
- MongoDB学习笔记:Python 操作MongoDB
MongoDB学习笔记:Python 操作MongoDB Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...
- python之pymongo
引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. MongoDB 数据库安 ...
- python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查
python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...
- 7.mongo python 库 pymongo的安装
1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...
- python中级---->pymongo存储json数据
这里面我们介绍一下python中操作mangodb的第三方库pymongo的使用,以及简单的使用requests库作爬虫.人情冷暖正如花开花谢,不如将这种现象,想成一种必然的季节. pymongo的安 ...
- 笔记-python操作mysql
笔记-python操作mysql 1. 开始 1.1. 环境准备-mysql create database db_python; use db_python; create tabl ...
- 笔记-python异常信息输出
笔记-python异常信息输出 1. 异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...
随机推荐
- python反爬之封IP
# requests是第三方库,需要安装 pip install requests import requests # 在日常的爬虫中,封ip也是一个很常用的反爬虫手段,遇到这种情况,我们只需要在每次 ...
- rpm打包工具
http://fedoraproject.org/wiki/How_to_create_an_RPM_package # rpm --showrc|grep _topdir -14: _builddi ...
- DB2安装教程图解
下载好之后,是exe文件,但是双击后基本上都是解压,但是使用自身的解压的话会有很多文件解压失败的情况,所以推荐使用自己电脑上自带的解压工具直接解压(如360解压,好压等). 解压之后直接运行setup ...
- 原生Js在各大浏览器上、火狐、ie、谷歌、360等出现的不兼容问题。
1 document.getElementsByName("name") 在Ie低版本,360普通版本,以及火狐低版本不支持. 2 element.innerText 在低版本的 ...
- 2017.10.6 Java命名规范及使用情况
Package 的命名 Package 的名字应该都是由一个小写单词组成. Class 的命名 Class 的名字必须由大写字母开头而其他字母都小写的单词组成 Class 变量的命名 变量的名字必须用 ...
- c#无限循环
for( ; ; ) 最快的 while(true) while(1) ?好像也是不过就是扫到的 public bool a= true; 中断一个循环while(a) a=f ...
- GPU计算的后CUDA时代-OpenACC(转)
在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...
- 【Java-Regex】该用正则表达式却偷懒使用 indexOf 引起的BUG
留着等下写. 背景 Excel列内容,无法获取全部格式,但我们有最终的准确格式. 用准确格式去严格匹配,而不是盲人摸象. 不符合就置为空,符合就.
- 4、SpringBoot------邮件发送(2)
开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/0d6194d6ea2d7f4e19791a3d3f3167f861 ...
- python中的zipfile
zipfile - Work with ZIP archives ZipFile.namelist() Return a list of archive members by name. 返回压缩成员 ...