笔记-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的更多相关文章

  1. Python 使用pymongo操作mongodb库

    Python 使用pymongo操作mongodb库 2016-12-31 21:55 1115人阅读 评论(0) 收藏 举报  分类: - - - Python(10)  版权声明:本文为博主原创文 ...

  2. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  3. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  4. python之pymongo

    引入 在这里我们来看一下Python3下MongoDB的存储操作,在本节开始之前请确保你已经安装好了MongoDB并启动了其服务,另外安装好了Python的PyMongo库. MongoDB 数据库安 ...

  5. python操作三大主流数据库(8)python操作mongodb数据库②python使用pymongo操作mongodb的增删改查

    python操作mongodb数据库②python使用pymongo操作mongodb的增删改查 文档http://api.mongodb.com/python/current/api/index.h ...

  6. 7.mongo python 库 pymongo的安装

    1.Python 中如果想要和 MongoDB 进行交互就需要借助于 PyMongo 库,在CMD中使用命令即可[注意此处是pip3,pip无法安装]: pip3 install pymongo 2. ...

  7. python中级---->pymongo存储json数据

    这里面我们介绍一下python中操作mangodb的第三方库pymongo的使用,以及简单的使用requests库作爬虫.人情冷暖正如花开花谢,不如将这种现象,想成一种必然的季节. pymongo的安 ...

  8. 笔记-python操作mysql

    笔记-python操作mysql 1.      开始 1.1.    环境准备-mysql create database db_python; use db_python; create tabl ...

  9. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

随机推荐

  1. 让你的sharepoint2013具有EMS快递查询的功能

    <iframe name="kuaidi100" src="http://www.kuaidi100.com/frame/app/index2.html" ...

  2. 属性动画 常用属性及View常用方法

    View类中,常用于属性动画的属性: translationX and translationY: These properties control where the View is located ...

  3. 5步玩转Power BI Embedded,老司机全程带路解析

    最近,由世纪互联运营的 Microsoft Azure 发布了一个超级炫酷的服务 Power BI Embedded,该服务可以通过 REST API 和 Power BI SDK 将 Power B ...

  4. 解决ubuntu的chkconfig[/sbin/insserv 无法找到路径问题]

    http://www.cnblogs.com/lost-1987/archive/2012/10/17/2727285.html 今天在虚拟机里做DRBD实验,使用chkconfig管理服务的时候,出 ...

  5. 关于Linux主流框架运维工作剖析

    LINUX是开源的,这也是最主要的原因,想学Windows,Unix对不起,没有源代码.也正是因为这样,LINUX才能够像雪球一样越滚越大,发展到现在这种规模.今天将为大家带来关于Linux主流框架运 ...

  6. I2C总线协议学习笔记 (转载)

    1.I2C协议   2条双向串行线,一条数据线SDA,一条时钟线SCL.   SDA传输数据是大端传输,每次传输8bit,即一字节.   支持多主控(multimastering),任何时间点只能有一 ...

  7. 如何利用BAPI SD_SALESDOCUMENT_CHANGE修改Sales Order的字段

    假设我想修改S/4HANA里Sales Order抬头的Service Date字段SERV_DATE: 首先从数据库表VBKD里查找到SERV_DATE修改之前的值为2020年1月1日 使用如下代码 ...

  8. Uva 11806 拉拉队

    题目链接:https://uva.onlinejudge.org/external/118/11806.pdf 题意: n行m列的矩阵上放k个棋子,其中要求第一行,最后一行,第一列,最后一列必须要有. ...

  9. Poj(1521),哈夫曼编码

    题目链接:http://poj.org/problem?id=1521 这里,网上有很多博客都有写,很多人没有建树,直接就是求一下这个哈夫曼编码的长度,的确很巧妙,我也用的这个方法,但是,几乎所有博客 ...

  10. 1.4 NBU配置备份策略(Policy)

    1.4 配置备份策略(Policy) 一个备份策略由四部分组成. Attributes(属性) Policy是否Active Policy类型 由此Policy产生的任务的优先级 使用的Storage ...