笔记-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,然后通 ...
随机推荐
- Android SQLite数据库之事务的学习
SQLite是Android系统内置的一款轻量级的关系型数据库,它的运算速度非常快,占用资源很少,通常只需要几百K的内存就足够了.SQLite不仅支持标准的SQL语法,还遵循了数据库的ACID事务. ...
- intel Skylake平台安装WIN7
目前针对IntelSkylake平台安装WIN7时USB接口失灵的问题,不少硬件厂商都推出了免费修改工具来集成XHCI USB控制器驱动,这其中技嘉提供了一款Windows USB Installat ...
- Linux与Windows区别——总结中
一:在Linux系统中,每一个文件都多加了很多的属性进来,尤其是用户组的概念 二:Windows下面一个文件是否具有执行的能力是通过“扩展名”来判断的,如:.exe,.bat,.com等 Linux下 ...
- 吴超hadoop7天视频教程全集
吴超hadoop7天视频教程全集 一.初级班全套视频 1.linux使用(3节) 2.伪分布模式安装hadoop(2节) 3.HDFS的体系结构和操作(2节) 4.HDFS的java操作方式(4节) ...
- 数据结构与算法分析java——线性表2(ArrarList )
ArrayList ArrayList 是一个数组队列,相当于 动态数组.与Java中的数组相比,它的容量能动态增长.它继承于AbstractList,实现了List, RandomAccess, C ...
- segment and section for c++ elf
http://blog.csdn.net/jiafu1115/article/details/12992497 写一个汇编程序保存成文本文件max.s. 汇编器读取这个文本文件转换成目标文件max.o ...
- 2017.10.24 Java 详解 JVM 工作原理和流程
JVM工作原理和特点主要是指操作系统装入JVM是通过jdk中Java.exe来完成,通过下面4步来完成JVM环境. 1.创建JVM装载环境和配置 2.装载JVM.dll 3.初始化JVM.dll并挂界 ...
- 奇异值分解(SVD)和最小二乘解在解齐次线性超定方程中的应用
奇异值分解,是在A不为方阵时的对特征值分解的一种拓展.奇异值和特征值的重要意义相似,都是为了提取出矩阵的主要特征. 对于齐次线性方程 A*X =0;当A的秩大于列数时,就需要求解最小二乘解,在||X| ...
- Large-scale Scene Understanding (LSUN)
Large-scale Scene Understanding (LSUN) http://lsun.cs.princeton.edu/#organizers http://sunw.csail.mi ...
- 前端框架之bootstrap及相关技术网站
1.web框架之bootstrap bootstrap来源Twitter,是一个CSS/HTML框架,它是基于HTML,CSS,JavaScript下的,使用简洁,当中提供了很多HTML和CSS 如用 ...