Python3中PyMongo使用举例

2023-11-05

MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,与平台无关,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

在Python中操作MongoDB可以使用PyMongo,在ubuntu上安装PyMongo,执行:$ python3 -m pip install pymongo ,结果如下图所示:

在ubuntu上安装MongoDB,执行:$ sudo apt-get install mongodb ,这样在14.04上默认安装的是2.4.9版本,安装完后默认启动服务,但是之前我们安装pymongo时是3.7.2版本,这样导致pymongo与mongo不匹配,即出现” pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 0, but this version of PyMongo requires at least 2 (MongoDB 2.6).”的错误,解决方法可以是降低pymongo的版本,或者升级mongo的版本。在ubuntu安装高版本的mongodb可以参考:https://docs.mongodb.com/v2.6/tutorial/install-mongodb-on-ubuntu/ ,这里为了简便,降低pymongo的版本,从3.7.2降低到3.4.0,执行命令:conda install pymongo=3.4.0 。

测试代码如下:

import pymongo

'''
reference:
	https://juejin.im/post/5addbd0e518825671f2f62ee
	http://www.runoob.com/python3/python-mongodb.html
	https://blog.csdn.net/xsdxs/article/details/52565489
'''

def print_results(description, results):
	strs = description + " type:"
	print(strs, type(results))
	description += ":"
	if (isinstance(results, dict)):
		print(description, results)
	else: 
		for result in results:
			print(description, result)

if __name__ == "__main__":
	print("pymongo version:", pymongo.version)

	client = pymongo.MongoClient(host='localhost', port=27017) # mongodb默认端口是27017
	print("connection successed:", client.server_info()) # 判断是否连接成功

	db = client.test # 指定test数据库, 如果没有则会自动创建
	collection = db.students # 每个数据库又包含许多集合
	student1 = {'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
	result = collection.insert_one(student1) # 在students集合中插入一条学生数据
	print("insert result:", result)

	student2 = {'id': '20170102', 'name': 'Tom', 'age': 21, 'gender': 'male'}
	student3 = {'id': '20170203', 'name': 'Mike', 'age': 22, 'gender': 'male'}
	result = collection.insert_many([student2, student3]) # 在students集合中插入多条学生数据
	print("many insert result:", result)

	result = collection.find_one({"name": "Tom"}) # 查询单个结果
	print_results("find one result", result)

	results = collection.find({"age": 20}) # 查询多个结果
	print_results("find many results", results)

	results = collection.find({"age": {"$gt": 20}}) # 查询年龄大于20的多个结果
	print_results("find age > 20 many results", results)

	count = collection.find({"age": 20}).count() # 查询计数
	print("find result count:", count)

	result = collection.delete_one({"age": 21}) # 删除一条数据
	print("delete one result:", result)
	print("delete one result count:", result.deleted_count)

	results = collection.delete_many({"age": {"$gte": 21}})
	print("delete many results:", results)
	print("delete many results count", results.deleted_count)

	condition = {"name": "Jordan"}
	student = collection.find_one(condition)
	#print_results("find one result", student)
	student["age"] = 25
	result = collection.update(condition, student) # 更新一条数据
	print("update result:", result)

	print("db collection names:", db.collection_names()) # 查看test数据库下所有表名称

	dblist = client.database_names() # 获取mongodb下所有数据库
	print("db list names:", dblist)

执行结果如下:

GitHubhttps://github.com/fengbingchun/Python_Test

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python3中PyMongo使用举例 的相关文章

  • 无法“安装”plpython3u - postgresql

    我正在尝试在 postgresql 中使用 python 语言 像这样的事情 create or replace function test a integer returns integer as if a 2 0 return even
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • 如何在 Python 中检索 for 循环中的剩余项目?

    我有一个简单的 for 循环迭代项目列表 在某些时候 我知道它会破裂 我该如何退回剩余的物品 for i in a b c d e f g try some func i except return remaining items if s
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • SQLALchemy .query:类“Car”的未解析属性引用“query”

    我有一个这里已经提到的问题https youtrack jetbrains com issue PY 44557 https youtrack jetbrains com issue PY 44557 但我还没有找到解决方案 我使用 Pyt
  • 添加不同形状的 numpy 数组

    我想添加两个不同形状的 numpy 数组 但不进行广播 而是将 缺失 值视为零 可能最简单的例子是 1 2 3 2 gt 3 2 3 or 1 2 3 2 1 gt 3 2 3 1 0 0 我事先不知道形状 我正在弄乱每个 np shape
  • 如何使用Python创建历史时间线

    So I ve seen a few answers on here that helped a bit but my dataset is larger than the ones that have been answered prev
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • 将图像分割成多个网格

    我使用下面的代码将图像分割成网格的 20 个相等的部分 import cv2 im cv2 imread apple jpg im cv2 resize im 1000 500 imgwidth im shape 0 imgheight i
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 有没有办法检测正在运行的代码是否正在上下文管理器内执行?

    正如标题所述 有没有办法做到这样的事情 def call back if called inside context print running in context else print called outside context 这将
  • 类型错误:预期单个张量时的张量列表 - 将 const 与 tf.random_normal 一起使用时

    我有以下 TensorFlow 代码 tf constant tf random normal time step batch size 1 1 我正进入 状态TypeError List of Tensors when single Te
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • Python 类继承 - 诡异的动作

    我观察到类继承有一个奇怪的效果 对于我正在处理的项目 我正在创建一个类来充当另一个模块的类的包装器 我正在使用第 3 方 aeidon 模块 用于操作字幕文件 但问题可能不太具体 以下是您通常如何使用该模块 project aeidon P

随机推荐

  • 枚举类型的用法

    枚举类型的定义 枚举类型 enumeration 是C 中的一种派生数据类型 它是由用户定义的若干枚举常量的集合 定义格式 枚举类型的定义格式为 enum lt 类型名 gt lt 枚举常量表 gt 其中 关键字enum 指明其后的标识符是
  • 一些你需要掌握的 tsconfig.json 常用配置项

    大家好 我是前端西瓜哥 tsconfig json 是用来配置 TS 编译选项的 通常位于项目的根目录位置 我们可以用 ts 提供的 tsc 命令行工具 执行 tsc init tsc init Created a new tsconfig
  • cookie中存储json

    原文发布时间为 2009 12 14 来源于本人的百度文章 由搬家工具导入 http www denisdeng com p 563 最近的一个项目需要在cookie中存储json对象 查看网络资料 没有找到很好的例子 最终利用jquery
  • MySQL 表锁和行锁机制

    MySQL 表锁和行锁机制 行锁变表锁 是福还是坑 如果你不清楚MySQL加锁的原理 你会被它整的很惨 不知坑在何方 没事 我来给你们标记几个坑 遇到了可别乱踩 通过本章内容 带你学习MySQL的行锁 表锁 两种锁的优缺点 行锁变表锁的原因
  • 下载好看的壁纸四个网站就够了,尤其第二个,高清免费壁纸随你挑

    壁纸作为手机电脑的第一印象 我想一张好看的壁纸可以让你的心情变得十分愉悦 每个人喜欢的壁纸类型也是不同的 有些人喜欢科技 动漫 有些人却喜欢唯美 自然 但是好看的壁纸随处都有 但未必时自己想要的哪一款 所以今天我就来给大家推荐一些可以获得大
  • 【SpringBoot】Idea中web项目上传文件相对路径问题

    项目场景 springboot开发javaweb项目 在文件上传接口中 使用transferTo方法保存文件 当采用相对路径时保存会报错 问题描述 相对路径会报一个这样的错误 java io IOException java io File
  • 怎样系统的学习 AI 绘画?模型代码案例

    怎样系统的学习 AI 绘画 学习 AI 绘画需要从以下几个方面进行系统的学习 数学基础 学习 AI 绘画需要具备一定的数学基础 包括线性代数 概率论 微积分等 这些数学知识是深度学习模型的基础 有助于理解模型的数学原理和算法细节 编程基础
  • 抽签助手

    抽签助手实现 学习记录 今天突发奇想想要尝试一波抽签助手 具体代码如下 include
  • tomcat9调优2:Tomcat线程模型分析及其性能调优

    文章目录 Tomcat线程模型分析及其性能调优 Tomcat的IO模型 tomcat设计精髓点 Tomcat调优 Tomcat线程模型分析及其性能调优 Tomcat的IO模型 Tomcat 支持的多种 I O 模型和应用层协议 Tomcat
  • 基于计算机视觉实现自动报靶系统

    基于计算机视觉实现自动报靶系统 自动报靶系统是一种通过计算机视觉技术实现的靶标自动识别和跟踪的系统 该系统可以应用于一些需要高精度打靶的场合 如射击比赛 训练等 本文将介绍如何使用MATLAB实现一个基于计算机视觉的自动报靶系统 准备工作
  • LoadRunner录制图片验证码

    LoadRunner录制图片验证码 LoadRunner自身是无法捕获到图片验证码的 但是我们可以帮助LoadRunner来实现验证码的捕获 1 图片验证码 图片验证码的产生来自服务器端 由服务器生成随机数 然后写入到图片中 虽然LR可以录
  • 恢复图像-进行反卷积和非盲去卷积恢复原始图像

    这段 MATLAB 代码实现了对添加噪声的图像进行反卷积和非盲去卷积的处理 以恢复原始图像 读取失真图像 这里是标准的 img imread image jpg 转换图像的类型为double img im2double img 计算图像的大
  • 6、SpringBoot - 日志配置

    01 项目日志格式 Spring Boot 的默认日志输出类似于以下示例 2021 12 14 22 40 14 159 INFO 20132 main com kuangstudy SpringbootApplication Starte
  • Transfomer编码器中自注意力机制、前馈网络层、叠加和归一组件等讲解(图文解释)

    Transformer中的编码器不止一个 而是由一组N个编码器串联而成 一个编码的输出作为下一个编码器的输入 如下图所示 每一个编码器都从下方接收数据 再输出给上方 以此类推 原句中的特征会由最后一个编码器输出 编码器模块的主要功能就是提取
  • CCF CSP 认证 201612-2 工资计算 C语言

    include
  • 用抽象分层的方法分析Android的渲染和显示系统

    Hello World
  • Hinton关于RBM的代码注解之(二)backpropclassify.m

    源代码 http www cs toronto edu hinton MatlabForSciencePaper html 这个是关于RBM的微调步骤的代码 代价函数是交叉熵 Version 1 000 Code provided by R
  • Springboot-aop(一)

    引入依赖
  • EfficientNet与EfficientDet论文解读

    这两项工作均来自Google Brain的大佬 EfficientDet可以看做EfficientNet的工作拓展 目前EfficientNet的代码已经开源 EfficientDet已经被复现 这两项工作的纸面效果看起来特别优秀 与其他工
  • Python3中PyMongo使用举例

    MongoDB是一个基于分布式文件存储的开源数据库 由C 语言编写 与平台无关 旨在为WEB应用提供可扩展的高性能数据存储解决方案 MongoDB是一个介于关系数据库和非关系数据库之间的产品 是非关系数据库中功能最丰富 最像关系数据库的 它