笔记-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,然后通 ...
随机推荐
- ArcGIS创建要素类
在使用ARCGIS软件进行工作时,免不了要建立地理数据库和要素类之类的.一下是我创建文件地理数据库并在数据库中创建要素类写相关步骤: 1.启动软件,可以使用ARCCatalog直接进行创建也可以使用A ...
- Linux,MD5
Linux 中的 md5 利用 md5 消息摘要算法可以获取任何一件事物的唯一 ID 利用 md5 消息摘要算法可以判断任何一个事物是否被改变过 一致性验证:MD5的典型应用是对一段信息(Messag ...
- SPFieldLookupValue
//得到查阅项的值SPWeb web = site.OpenWeb();SPList list = web.Lists["DemoList"];SPListItem item = ...
- MyBatisUtil类
在用MyBatis框架连接数据库时,往往要经常创建sessionFactory,重复的编写大量代码,故将其中的重复代码提出成一个工具类,这样直接调用方法即可,可简化代码编写和优化运行效率,不需要重复的 ...
- CentOS7.3下关于DHCP中继代理服务器的详细配置
DHCP服务器只作用于局域网同一网段内,客户端是通过广播消息来获得DHCP服务器响应后才能得到IP地址的,但广播消息不能跨越子网,那么如何让客户端获取到DHCP服务器提供的IP地址呢?这就是DHCP中 ...
- Second last week for the second last semester!
This week, I focused more on the final project, such as H335(Computer structure, still confused with ...
- Selenium入门9 上传文件
上传文件步骤 1 找到文件上传的input标签 find_element_by_css_selector("input[type='file']") 2 用send_keys传入 ...
- 模拟水题,牛吃草(POJ2459)
题目链接:http://poj.org/problem?id=2459 题目大意:有C头牛,下面有C行,每头牛放进草地的时间,每天吃一个草,总共有F1个草,想要在第D的时候,草地只剩下F2个草. 解题 ...
- 使用cmd命令创建maven(web)项目+项目转换成IDEA项目+项目打包+Jetty运行Web项目
3条件:配置好环境 配置环境教程:https://www.cnblogs.com/weibanggang/p/9623705.html 第一步:查看版本信息,在cmd输入mvn –version,如果 ...
- hadoop中compare函数
在看hadoop 的二次排序的时候,改写了下, 加了第三个参数, 本来以为是在 public int compareTo(IntPair o) { System.out.println(" ...