localhost 已拒绝连接_【Python】MongoDB数据库的连接和操作

606c6525debadcfe451ebcdbc474da16.gif

安装

Python 要连接 MongoDB 需要 MongoDB 驱动。

pip安装:

python3 -m pip3 install pymongo

创建数据库

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["loaderman"]

注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

判断数据库是否已存在:

import pymongo
 
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
 
dblist = myclient.list_database_names()
# dblist = myclient.database_names()
if "loaderman" in dblist:
  print("数据库已存在!")

注意:database_names 在最新版本的 Python 中已废弃,Python3.7+ 之后的版本改为了 list_database_names()。

创建集合

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["loaderman"]
 
mycol = mydb["t_user"]
import pymongo
 
myclient = pymongo.MongoClient('mongodb://localhost:27017/')
 
mydb = myclient['loaderman']
 
collist = mydb. list_collection_names()
# collist = mydb.collection_names()
if "t_user" in collist: # 判断 sites 集合是否存在
  print("集合已存在!")

插入数据

用 insert_one() 方法,该方法的第一参数是字典 name => value 对。

插入单个数据:

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_user"]
    mydict = {"name": "loaderman", "age": "18", "des": "码上加油站,一起来加油"}
    x = mycol.insert_one(mydict)
    print(x.inserted_id)

if __name__ == "__main__":
    main()

输出:

5f05c019381b3ce588e04696

效果:

620213b1e62ea4fa1c800b780cb6c488.png

插入多条数据:

插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_site"]
    mylist = [
        {"name": "Taobao", "alexa": "100", "url": "https://www.taobao.com"},
        {"name": "QQ", "alexa": "101", "url": "https://www.qq.com"},
        {"name": "Facebook", "alexa": "10", "url": "https://www.facebook.com"},
        {"name": "知乎", "alexa": "103", "url": "https://www.zhihu.com"},
        {"name": "Github", "alexa": "109", "url": "https://www.github.com"}
    ]

    x = mycol.insert_many(mylist)

    # 输出插入的所有文档对应的 _id 值
    print(x.inserted_ids)


if __name__ == "__main__":
    main()

输出:

[ObjectId('5f05c0c0bacd4ef964560988'), ObjectId('5f05c0c0bacd4ef964560989'), ObjectId('5f05c0c0bacd4ef96456098a'), ObjectId('5f05c0c0bacd4ef96456098b'), ObjectId('5f05c0c0bacd4ef96456098c')]

效果:

bb10bd153252631e6bb5fe386d0310fa.png

查询数据

  • 使用 find_one() 方法来查询集合中的一条数据。

  • find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。 可以对find() 中设置参数来过滤数据。

  • 如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_site"]
    # 使用 find_one() 方法来查询集合中的一条数据。
    x = mycol.find_one()
    print("***********查询集合中的一条数据。************")
    print(x)
    print("***********查询集合中的所有数据************")
    # find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。
    for x in mycol.find():
        print(x)
    print("***********除了 alexa 字段外,其他都返回************")
    # find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1。
    for x in mycol.find({}, {"alexa": 0}):
        print(x)
    # 根据指定条件查询,查找 name 字段为 "QQ" 的数据:
    myquery = {"name": "QQ"}
    mydoc = mycol.find(myquery)
    print("***********根据指定条件查询************")
    for x in mydoc:
        print(x)
    # 读取 name 字段中第一个字母 ASCII 值大于 H" 的数据
    myquery2 = {"name": {"$gt": "H"}}
    mydoc2 = mycol.find(myquery2)
    print("***********读取 name 字段中第一个字母ASCII值大于H的数据************")
    for x in mydoc2:
        print(x)

    # 正则表达式查询,读取 name 字段中第一个字母为 "R" 的数据,正则表达式修饰符条件为 {"$regex": "^R"}
    myquery = {"name": {"$regex": "Q"}}
    print("***********正则表达式查询************")
    mydoc = mycol.find(myquery)
    for x in mydoc:
        print(x)
    print("***********返回指定条数记录3条数据************")
    # 返回指定条数记录,查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。
    myresult = mycol.find().limit(3)
    # 输出结果
    for x in myresult:
        print(x)


if __name__ == "__main__":
    main()

运行输出:

***********查询集合中的一条数据。************
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
***********查询集合中的所有数据************
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
***********除了 alexa 字段外,其他都返回************
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'url': 'https://www.github.com'}
***********根据指定条件查询************
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
***********读取 name 字段中第一个字母ASCII值大于H的数据************
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
***********正则表达式查询************
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
***********返回指定条数记录3条数据************
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}

更新数据

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_site"]
    myquery = {"alexa": "100"}
    newvalues = {"$set": {"alexa": "12345"}}
    #修匹配到的第一条记录
    mycol.update_one(myquery, newvalues)
    # 输出修改后的 "sites" 集合
    for x in mycol.find():
        print(x)
    myquery = {"name": {"$regex": "^F"}}
    newvalues = {"$set": {"alexa": "66666"}}
    #修改所有匹配到的记录
    x1 = mycol.update_many(myquery, newvalues)
    # 输出修改后的 "sites" 集合
    for x in mycol.find():
        print(x)
    print(x1.modified_count, "文档已修改")


if __name__ == "__main__":
    main()

输出:

{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '12345', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '12356', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '12345', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '66666', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
1 文档已修改

排序

sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_site"]
    mydoc = mycol.find().sort("alexa")
    for x in mydoc:
        print(x)



if __name__ == "__main__":
    main()

输出:

{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c492'), 'name': 'Taobao', 'alexa': '12345', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '66666', 'url': 'https://www.facebook.com'}

删除数据

  • 用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

  • 使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

  • delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档。

  • 使用 drop() 方法来删除一个集合。

import pymongo


def main():
    myclient = pymongo.MongoClient('mongodb://localhost:27017/')
    mydb = myclient["loaderman"]
    mycol = mydb["t_site"]
    myquery = {"name": "Taobao"}

    mycol.delete_one(myquery)

    # 删除后输出
    for x in mycol.find():
        print(x)
    myquery = {"name": {"$regex": "^F"}}

    x = mycol.delete_many(myquery)
    print(x.deleted_count, "个文档已删除")
    x = mycol.delete_many({})

    print(x.deleted_count, "个文档已删除")
    mycol.drop()


if __name__ == "__main__":
    main()

输出:

{'_id': ObjectId('5f05c10bfd36a6335af1c493'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c494'), 'name': 'Facebook', 'alexa': '66666', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c495'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5f05c10bfd36a6335af1c496'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}
1 个文档已删除
3 个文档已删除

  码上加油站

  一起来加油

长按扫码关注

d9d3c7d3f4d7ebcd3dbd2e939d5fa999.png

点“在看”你懂得

0bd902120d2ff105ce4f5ce55b6a2b43.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/454445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)

一、出现的问题及解决方法: 今天在写一个table相关插件的时候无意中发现了这样一个问题,记得以前在写这种控制checkbox选中与非选中的代码时并没有这种bug,当时也是用的checked属性,而现在却行不通了。 于是乎做了以下测试&#x…

Python 错误和异常小结[转]

原文链接 http://blog.csdn.net/sinchb/article/details/8392827 事先说明哦,这不是一篇关于Python异常的全面介绍的文章,这只是在学习Python异常后的一篇笔记式的记录和小结性质的文章。什么?你还不知道什么是异常,额... 1.Py…

Django REST framework 认证、权限和频率组件

认证与权限频率组件 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制。然后 权限 和 限制 组件决定是否拒绝这个请求。 简单来说就是: 认证确定了你是谁权限确定你能不能访问某个接口限制确定你访问某…

高速率AVS整数变换的汇编实现与优化

1 引言 AVS标准Ⅲ采用的8x8整数变换在获得较H.264更高的压缩率和主观图像质量的同时,增加了算法的实现复杂性和时间开销。本文重点研究AVS编解码器的整数变换模块,针对不同的算法实现模式,在原有Visual C6.0整数变换模…

计算机与广播电视论文,浅谈广播电视中计算机技术的作用论文.pdf

1、计算机技术在广播电视的媒体内容中有重要应用在以往的广播电视中, 媒体内容主要分为音频和视频两种信号, 在传输的过程中使用的是模拟信号, 但模拟信号受到的外界干扰因素较为明显, 因此广播电视传播的媒体内容受到影响&#x…

opencv安装教程python3.7_Mac下安装使用Python-OpenCV,解决opencv3安装完成无法使用的问题 - pytorch中文网...

OpenCV是一个跨平台计算机视觉库,可以运行在Linux、Windows、Android和Mac OS操作系统上。提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。 Mac安装OpenCV 在我们的深度学习的过程中,对于图像&#…

NodeJS在CentOs7下安装

node下载地址:https://nodejs.org/en/download/ 1.安装gcc $ yum install gcc-c 2.解压最新版本 $ mkdir /usr/local/node$ tar zxvf node-v6.11.4.tar.gz $ cd node-v6.11.4$ ./configure --prefix/usr/local/node# 在当前目录下编译安装Node$ make$ make install 3.验证安装 …

Python功能之反射

有如下文件: index.py 1<span style"font-family:宋体, SimSun;">#!/usr/bin/env python<br data-filtered"filtered"># -*- coding:utf-8 -*-<br data-filtered"filtered">__author__ ryan<br data-filtered"filter…

Django REST framework 分页

分页模式 rest framework中提供了三种分页模式&#xff1a; from rest_framework.pagination import PageNumberPagination, LimitOffsetPagination, CursorPagination 全局配置 REST_FRAMEWORK {DEFAULT_PAGINATION_CLASS: rest_framework.pagination.LimitOffsetPaginat…

解析H.264视频编解码DSP实现与优化

引言 基于互联网的数字视频产业前景看好&#xff0c;而3G的规模部署&#xff0c;也会推动移动视频通信成为现实。但数字化后的视频图像具有数据海量性&#xff0c;给图像的存储和传输造成较大的困难。数字视频产业&#xff0c;是指数字内容中以数字视频形态为主的文化创意和传播…

ap计算机科学a买什么书,准备AP*计算机科学A考试-第1部分

你将学到什么Identify the use and proper use of Variables, Conditionals, Objects and primitives, control structures, booleans, lists and arrays, and Exceptions.Implement problem descriptions in well designed code.Identify and begin to design algorithms to s…

python 打包exe_python如何封装为exe

1、首先进入python安装路径D:\Python27\Scripts下&#xff0c;查看pip或easy_install是否安装。2、确保安装了pip或者easy_install&#xff0c;在cmd命令行下输入“easy_install”&#xff0c;没有提示“xxx不是内部或外部命令……”&#xff0c;就说明easy install工具安装成功…

CentOS7安装Hadoop2.7完整步骤

总体思路&#xff0c;准备主从服务器&#xff0c;配置主服务器可以无密码SSH登录从服务器&#xff0c;解压安装JDK&#xff0c;解压安装Hadoop&#xff0c;配置hdfs、mapreduce等主从关系。 1、环境&#xff0c;3台CentOS7&#xff0c;64位&#xff0c;Hadoop2.7需要64位Linux&…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服务端接收客户端传过来的数据&#xff0c;把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。 在了解解析器之前&#xff0c;我们要先知道Accept以及ContentType请求头。 Accept是告诉对方我能解析什么样的数据&#xff0c…

MyBatis的学习之路(二)

上篇文章介绍了MyBatis的配置文件&#xff0c;现在来介绍实体映射文件Mapper.xml。 说道实体映射文件&#xff0c;就不得不说一下实体与表之间的映射关系&#xff1a;单表映射和多表映射。 a. 单表映射 1 public class Admin{ 2 private String id; 3 private String n…

计算机一级实验素材题目,计算机一级EXCEL操作题整理素材(12页)-原创力文档...

素材摘录&#xff0c;文档可编辑分享PAGE 页码页码/NUMPAGES 总页数总页数单元格合并首先选中你要合并的单元格&#xff0c;然后找到EXCEL上的开始分区里的这种图标或者是含有“合并”两字的位置如图1-1&#xff0c;如果题目要求的是要你合并单元格并让内容居中&#xff0c;你就…

python爬取toefl_spark学习进度6-Python爬取数据的四个简单实例

今天本来想把昨天安装的intellij配置好&#xff0c;但是一直显示没有网络&#xff0c;网上查了相关资料也没有查出来解决办法。然后暂停了intellij的配置&#xff0c;开始做了几个Python爬取简单数据的实例&#xff0c;先做了几个最简单的&#xff0c;以后再加大难度&#xff0…

Django REST framework 版本

API 版本控制允许我们在不同的客户端之间更改行为&#xff08;同一个接口的不同版本会返回不同的数据&#xff09;。 DRF提供了许多不同的版本控制方案。 可能会有一些客户端因为某些原因不再维护了&#xff0c;但是我们后端的接口还要不断的更新迭代&#xff0c;这个时候通过…

AngularJS中的过滤器(filter)

AngularJS中的过滤器是用于对数据的格式化&#xff0c;或者筛选的函数&#xff0c;可以直接通过以下语法使用&#xff1a; {{expression|filter}} {{expression|filter1|filter2}} {{expression|filter1:param1,param2,...|filter2} 过滤器的种类有number&#xff0c;currency&…

计算机考试上传照片教程,电脑照片传到iPhone手机的详细步骤【图文】

苹果自带的iOS系统是不可以随便和电脑进行数据交换的&#xff0c;必须使用iTunes软件。许多用户为此问题困扰&#xff0c;我们有什么可以把电脑照片传到iPhone手机&#xff1f;下面我们就一起来看看把电脑照片传到iphone设备的详细步骤。具体方法如下&#xff1a;1&#xff0c;…