笔记-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. #include stdio.h(4)

    #include <stdio.h> int main() { //****************1.数组*************** //什么是数组:专门用来存放数据的 /* 格式 ...

  2. ztree树形图自定义图标在jeecg框架中不显示

    有时候工作遇到问题,就会硬着头皮去解决,今天给大家说一个ztree树形图自定义图标在jeecg框架中不显示的解决方法 对于这个问题,官方观法说法是在节点元素中加入icon的字段,然后后跟图标的url, ...

  3. WebAPI示例

    一.新建项目 二. 代码: Models.Products实体类 public class Product { /// <summary> /// 产品编号 /// </summar ...

  4. 二种方法安装卸载Windows服务的命令

    第一种方法:通过Dos命令安装系统服务1. 开始 运行输入 cmd 进入dos窗口2. cd命令进入到C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727目录下, ...

  5. 搭建日志环境并配置显示DDL语句

    现在一般用log4j用的比较多,用slf4j用的比较少,所有这里我们就不用 hibernate内置的slf4j了. 用到slf的接口,log4j的实现. 要在hibernate中使用log4j,如图所 ...

  6. 音乐代码 (DNF天空之城、欢乐颂)。

    太感人了 DNF天空之城 #include <cstdio> #include <windows.h> #define qdo 262 #define qre 294 #def ...

  7. OpenGL学习 Introduction

    OpenGL and Graphics Pipeline The word pipeline is from production lines in factories.Generating a pr ...

  8. sublim的正则匹配(待续)

    ctrl+H 打开匹配模式 打开正则匹配模式 正则匹配的一些方法:  点代表的是任意字符.* 代表的是取 0 至 无限长度问号代表的是非贪婪模式.三个链接在一起是取尽量少的任意字符,一般不会这么单独写 ...

  9. php简单开启gzip压缩方法(zlib.output_compression)

    网上的教程基本是你抄我来我抄他,不外乎加头加尾或者自构函数两种写法.实际上每个php页面都要去加代码——当然也可以include引用,不过总显得略微麻烦   一般而言,页面文件开启gzip压缩以后,其 ...

  10. python_4_interaction

    #1(方法1)尽量不用这种拼接法,效率低下,占用内存多 name=input("name:") age=input('age:') job=input('job:') salary ...