安装

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

效果:

插入多条数据:

插入多个文档使用 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')]

效果:

查询数据

  • 使用 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 个文档已删除

码上加油站

一起来加油

长按扫码关注

点“在看”你懂得

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

  1. vue项目出现此地址,但是访问时显示,嗯… 无法访问此页面localhost 已拒绝连接

    vue项目出现此地址,但是访问时显示,嗯- 无法访问此页面localhost 已拒绝连接. 出现原因:端口号8081被占用 解决办法: 1.先查看端口号,win+R打开命令提示符,输入netstat ...

  2. Python MySQL数据库的连接以及基本操作

    Python MySQL数据库的连接以及基本操作 一.数据库的连接 1.直接连接 2.连接池连接 二. 数据库的基本操作 1.执行函数 2.创建数据表 3.删除表 4.插入函数 6.删除函数 7.状态 ...

  3. python数据库模糊查询_Python操作mongodb数据库进行模糊查询操作示例

    本文实例讲述了Python操作mongodb数据库进行模糊查询操作.分享给大家供大家参考,具体如下: # -*- coding: utf-8 -*- import pymongo import re ...

  4. 后端代码之服务端 - MongoDB数据库的连接、重启测试与(Studio3T)查看 - 讲解篇

    文章目录 前言 一. 在项目中安装Mongoose中间件 二. 安装完毕,新建一个路由作为测试路由 通过WebStorm软件,打开项目,编辑index.js文件: 三.重启服务,浏览器查看:测试连接是 ...

  5. mysql拒绝远程连接_解决Mysql数据库拒绝远程连接和忘记密码的问题

    解决数据库忘记密码的问题 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 编辑m ...

  6. localhost 已拒绝连接。

    Tomcat的localhost:8080拒绝访问. 直接在tomcat的bin目录下双击startup.bat,启动就好了,再访问localhost:8080就可以出来了.

  7. mongodb 搜索速度_初识 MongoDB 数据库

    初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...

  8. python常见数据库的连接方式【游标】及【pandas】数据读取

    本文介绍以下数据库的连接方式,及数据的增删改查 下方中用到的数据,均为随机数据,无实际业务意义. Mysql-游标及pandas连接方式 PostgreSQL-游标及pandas连接方式 Oracle ...

  9. Python mongodb数据库

    介绍 在前面的课程中我们学习了mysql这种关系型数据库,那么接下来,我们会来学习一种非数据库mongodb,mongodb数据库主要用于海量存储,常被用在数据采集项目中. 内容 mongodb的介绍 ...

  10. 怎么获取mysql的链接字符串_如何从数据库获取连接字符串

    小编典典 获取连接字符串的最简单方法是使用Visual Studio中的"服务器资源管理器"窗口(菜单 视图 , 服务器资源管理器 ),然后从该窗口连接到服务器. 然后,您可以在已 ...

最新文章

  1. 2021年春季学期-信号与系统-第七次作业参考答案-第二小题
  2. php将中文插入数据库出现乱码
  3. 中国上榜前50名富豪当中,有多少人完全是通过白手起家?
  4. 逆向工程生成的Mapper.xml以及*Example.java详解
  5. 小米平板5 pro 解锁 Bootloader
  6. 网页转化成pdf,网页转换图片,wkhtmltopdf,wkhtmltoimage使用小结
  7. 用html制作三角形九九乘法表,用js实现打印九九乘法表
  8. Java各个版本区别
  9. diy一个android手机版下载,家居3D设计DIY
  10. 交流异步电机的Modelica模型
  11. Goldfish 介绍
  12. Linux Cgroup cpu子系统实验
  13. killall 命令的用法
  14. ORACLE经验汇总
  15. Iphone5 图片适配
  16. 论坛灌水机 Delphi代码
  17. 时间戳转日期格式 +new Date
  18. 2008-12-29日xp系统补丁导致iis无法启动
  19. 数学建模-商人过河问题
  20. 中国紫外线消毒灯行业深度分析与发展前景规划研究报告2022-2028年版

热门文章

  1. C++ primer 第14章 操作重载与类型转换
  2. Socket程序从Windows移植到Linux下的一些注意事项
  3. Vue 生命周期中 mounted( ) 和 created( ) 的区别
  4. Nexus 安装(Linux 环境)
  5. LINQ to JavaScript
  6. HTTP 协议知识点总结(一)
  7. 修改 cmd 字体为 Consolas
  8. 第 三 十 八 天:Linux 的 LVM 逻 辑 卷 管 理
  9. 图片延迟加载和滑动翻页
  10. RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)