笔记-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. python反爬之封IP

    # requests是第三方库,需要安装 pip install requests import requests # 在日常的爬虫中,封ip也是一个很常用的反爬虫手段,遇到这种情况,我们只需要在每次 ...

  2. rpm打包工具

    http://fedoraproject.org/wiki/How_to_create_an_RPM_package # rpm --showrc|grep _topdir -14: _builddi ...

  3. DB2安装教程图解

    下载好之后,是exe文件,但是双击后基本上都是解压,但是使用自身的解压的话会有很多文件解压失败的情况,所以推荐使用自己电脑上自带的解压工具直接解压(如360解压,好压等). 解压之后直接运行setup ...

  4. 原生Js在各大浏览器上、火狐、ie、谷歌、360等出现的不兼容问题。

    1 document.getElementsByName("name")  在Ie低版本,360普通版本,以及火狐低版本不支持. 2 element.innerText 在低版本的 ...

  5. 2017.10.6 Java命名规范及使用情况

    Package 的命名 Package 的名字应该都是由一个小写单词组成. Class 的命名 Class 的名字必须由大写字母开头而其他字母都小写的单词组成 Class 变量的命名 变量的名字必须用 ...

  6. c#无限循环

    for( ; ; ) 最快的 while(true) while(1)             ?好像也是不过就是扫到的 public bool a= true; 中断一个循环while(a) a=f ...

  7. GPU计算的后CUDA时代-OpenACC(转)

    在西雅图超级计算大会(SC11)上发布了新的基于指令的加速器并行编程标准,既OpenACC.这个开发标准的目的是让更多的编程人员可以用到GPU计算,同时计算结果可以跨加速器使用,甚至能用在多核CPU上 ...

  8. 【Java-Regex】该用正则表达式却偷懒使用 indexOf 引起的BUG

    留着等下写. 背景 Excel列内容,无法获取全部格式,但我们有最终的准确格式. 用准确格式去严格匹配,而不是盲人摸象. 不符合就置为空,符合就.

  9. 4、SpringBoot------邮件发送(2)

    开发工具:STS 代码下载链接:https://github.com/theIndoorTrain/Springboot/tree/0d6194d6ea2d7f4e19791a3d3f3167f861 ...

  10. python中的zipfile

    zipfile - Work with ZIP archives ZipFile.namelist() Return a list of archive members by name. 返回压缩成员 ...