笔记-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. 《ArcGIS Runtime SDK for Android开发笔记》——问题集:使用TextSymbol做标注显示乱码

    1.前言 在14年的时候写过一篇博客关于ArcGIS for Android 10.1.1API 中文标注导致程序异常崩溃问题,但是当时并没有很好的解决这样一个问题,也并没有深入研究分析这样的一个异常 ...

  2. JavaScript如何转换数据库DateTime字段类型?

    Javascript一种直译式脚本语言,是一种动态类型.弱类型.基于原型的语言,内置支持类型.它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在html(标 ...

  3. 支持多域名的免费SSL证书

    知乎网友称其支持多域名: https://www.zhihu.com/question/19578422 配置教程: https://www.cnblogs.com/duanweishi/p/8483 ...

  4. 大数据量高并发的数据库优化详解(MSSQL)

    转载自:http://www.jb51.net/article/71041.htm 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能. ...

  5. ASP .NET CORE 读取配置文件的方法

    老式的config文件在ASP.net core2.0中变成了appsettings.json,如果想要读取自定义配置,可以写如下代码 { "Logging": { "I ...

  6. 6.Netbackup-Oracle数据库恢复演练报告(下)

    1.1 Oracle数据库恢复  目录 1 安装新的客户端 2 新建异机恢复文件 3 新建数据库实例 4 建立spfile文件 5 建立数据文件夹 6 启动数据库到nomount状态 7 列出备份信息 ...

  7. 调用外部EXE文件

    实现效果: 知识运用: Process类的Start方法 实现代码: private void button1_Click(object sender, EventArgs e) { OpenFile ...

  8. HTTP 下载文件工具类

    ResponseUtils.java package javax.utils; import java.io.ByteArrayInputStream; import java.io.File; im ...

  9. hadoop分类输出

    import org.apache.hadoop.io.Text; import java.io.IOException;import java.util.Iterator;import java.u ...

  10. ajax实现分页页签

    在一些搜索列表的页面中,我们会遇到一些需要处理页签的需求,一般这样的页面,要么是在JSP中处理,每次都跳页.这样做是个很方便的方法.但是如果页面上有很多和列表无关,每次都需要重新渲染是不是显得慢了一些 ...