Python系列之MongoDB--01.基本知识

Python操作MongoDB看这一篇就够了 MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python 3下MongoDB的存储操作。 1. 准备工作 在开始之前,请确保已经安装好了MongoDB并启动了其服务,并且安装好了Python的PyMongo库。 2. 连接MongoDB 连接MongoDB时,我们需要使用PyMongo库里面的MongoClient。一般来说,传入MongoDB的IP及 阅读详情

mongodb的下载与安装(请下载3.0.15版本的避免不必要的错误)

  • 安装步骤
1.安装比较简单,中间主要是选择“Custom”自定义 安装路径修改下:D:\MongoDB,直接放在D盘根目录下然后不断“下一步”,安装至结束。

2.在MongoDB下创建data,在data下再创建db:D:\MongoDB\server\data

3.打开CMD,进入D:\MongoDB\server\3.0\bin,输入如下的命令启动mongodb服务:mongod --dbpath D:\MongoDB\server\data,
![如图](https://cl.ly/0x3M3y313y29/QQ%E6%88%AA%E5%9B%BE20180417094958.png)
4.打开新的CMD,进入D:\MongoDB\server\3.0\bin,输入mongo命令
  进行连接

mongodb的基本操作指令

创建数据库

use DATABASE_NAME # 如果不存在则会自动创建,否则使用该数据库

查看所有数据库

>show dbs
>local  0.078GB  
test   0.078GB

向数据库中插入一条数据

db.DATABASE_NAME.insert({"name":"mongodb"})

插入文档

db.COLLECTION_NAME.insert(document)
实例
db.col.insert({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'MongoDB中文网', 
url: 'http://www.mongodb.org.cn', 
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100 # 这是级别

也可以将数据定义一个量再插入
document=({title: 'MongoDB 教程',
description: 'MongoDB 是一个 Nosql 数据库',
by: 'MongoDB中文网', 
url: 'http://www.mongodb.org.cn', 
tags: ['mongodb', 'database', 'NoSQL'],
likes: 100})

db.COLLECTION_NAME.insert(document)

查询语句

db.COLLECTION_NAME.find().pretty() # 将数据进行格式化查出

修改语句

db.collection.update(    
<query>,  # 条件 类似sql的where后面的语句
<update>, # 类似于 sql的set后面的值
{       
    upsert: <boolean>,   # 可选参数,如果不存在是否插入该数据,默认false不插入,true插入
    multi: <boolean>,  # 可选参数true 只跟新查到的第一条记录
    writeConcern: <document>  # 可选 抛出异常的级别
}
)

db.COLLECTION_NAME.update(
{'title':'MongoDB 教程'},
{$set:{'title':'MongoDB'}},
{multi:true}
)

save()方法,与insert()的区别。前者是如果存在ID相同的数据就将其覆盖,后者将会报错

db.collection.save(    
<document>,     # 保存的文档
{      
    writeConcern: <document> # 抛出异常的级别
}  
)  
实例

db.COLLECTION_NAME.save({   
"_id" : ObjectId("56064f89ade2f21f36b03136"),   
"title" : "MongoDB",  
"description" : "MongoDB 是一个 Nosql 数据库",
"by" : "MongoDB中文网",   
"url" : "http://www.mongodb.org.cn",     
"tags" : [           
    "mongodb",       
    "NoSQL"    
],    
"likes" : 110
}
)

删除语法

db.collection.remove( 
<query>,     # 条件
<justOne>   # 是否删除一个
)  

实例
db.COLLECTION_NAME.remove({'title':'MongoDB 教程'})  WriteResult({ "nRemoved" : 2 })

如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:

如图

and条件

db.COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()  

类似于where语句WHERE key1='value1' AND key2='value2'

or条件

db.COLLECTION_NAME.find{  $or: [        {key1: value1}, {key2:value2}        ]     }  ).pretty()

db.COLLECTION_NAME.find({$or:[{"by":"菜鸟教程"},{"title": "MongoDB 教程"}]}).pretty()

可视化试图工具robomongo的安装
https://robomongo.org/download

python连接数据库

pymongo的使用

pip install pymongo #在python命令界面安装
from pymongo import MongoClient  #导入模块
client=MongoClient('localhost',20171) #获取连接

# 增加一条数据value保存的值,table指定的表
def save(self, value, table):  
    self.db[table].insert_one(value)
    return True

# 修改一条数据condition条件,table指定的表,data修改数据
def update(self, table, condition, data):
    self.db[table].update(condition, data, False, False)
    return True

# 查询指定列的数据value保存的值,table指定的表Column列名
def selectColumn(self, table, value, column):
    post = self.db[table].find(value, {column: 1})
    return post

# 通过Id删除数据pk为ID,table指定的表
def delete(self,pk,table):
    self.db[table].delete_one(pk=pk)
    return True

mongoengine的使用

pip install mongoengine
from mongoengine import * 
connect('数据库名') # 连接数据库

# 成绩集合
class Grade(EmbeddedDocument):
    score = FloatField(required=True)
    name = StringField(required=True)


SEX_CHOICES = {
('female', '女'),
('male', '男')
}

# 编写ord模型,grades引用Grade能够封装数据
class Student(Document):
    name = StringField(required=True, max_length=20)
    sex = StringField(required=True,choices=SEX_CHOICES)
    age = IntField(required=True)
    create_time = DateTimeField()
    grades = ListField(EmbeddedDocumentField(Grade))

    meta = {
    'collection':'student'  # 指定集合名,如果这里没指明会根据模型名来创建
    }

    def add_one(self):
    chinese = Grade(
        name='语文',
        score=88.2
    )
    math = Grade(
        name='数学',
        score=78
    )
    English = Grade(
        name='英语',
        score=78
    )
    cls = Classmate(
        name="是谁",
        age=21,
        sex='female',
        grades=[chinese, math,English]
    ).save()
    return cls


#  这是进行逻辑处理的类
class Controller(object):
    '''查询一条数据'''
    def find_one(self):
        cls = Classmate.objects.first()
        return cls
    '''查询多条数据'''
    def find_all(self):
        return Classmate.objects.all()
    '''根据id来获取数据'''
    def get_by_id(self,id):
        return Classmate.objects.filter(pk=id).first()
    '''修改性别为male的年龄增加10'''
    def update(self):
        Classmate.objects.filter(sex='male').update(inc__age=10)
        return True
    '''删除数据性别为male的'''
    def delete(self):
        Classmate.objects.filter(sex='male').delete()
        return True

应用flask框架搭建简易的新闻项目,前端页面都有

新建一个flask项目

1.在news.py中

from datetime import datetime
from flask import Flask, render_template, flash, redirect, url_for, abort, request
from flask_mongoengine import MongoEngine
from forms import NewsForm

app = Flask(__name__)
# mongodb 数据库配置
    app.config['MONGODB_SETTINGS'] = {
    'db': 'flask-news',
    'host': '127.0.0.1',
    'port': 27017
}
# 获取DB
db = MongoEngine(app)



class News(db.Document):
""" 新闻模型 """

    title = db.StringField(required=True, max_length=200)
    img_url = db.StringField()
    content = db.StringField()
    is_valid = db.BooleanField(default=True)
    created_at = db.DateTimeField(default=datetime.now())
    updated_at = db.DateTimeField(default=datetime.now())
    news_type = db.StringField(required=True, choices=NEWS_TYPES)

    meta = {
        'collection': 'news'  # 指定表是news
        'ordering':'-created_at' # 指定排序按照时间的倒序
    }


    @app.route('/')  #设置路由通过http访问
    def index():
    """ 新闻首页 """
        news_list = News.objects.filter(is_valid=True)# 查询所有数据
        # 跳转到index.html中,index.html有一个属性news_list并赋值,就能查询到
        return render_template("index.html", news_list=news_list)


    @app.route('/cat/<name>/')# 前端新闻类别有个属性name,取得值传入方法通过新闻类型查询并把值传回前端
    def cat(name):
        """ 新闻类别页面 """
        news_list = News.objects.filter(is_valid=True, news_type=name)# 查询符合类型的且未被删除的
        return render_template('cat.html', name=name, news_list=news_list)

    # 通过主键查询详情将信息传到前台
    @app.route('/detail/<pk>/')
    def detail(pk):
    """ 新闻详情页 """
    new_obj = News.objects.filter(pk=pk).first()
    return render_template('detail.html', new_obj=new_obj)

    # 从前台传page属性通过自带的paginate方法进行分页,并将查询的值传到前台
    @app.route('/admin/')
    @app.route('/admin/<int:page>/')
    def admin(page=None):
    """ 后台管理首页 """
    if page is None:
        page = 1
    page_data = News.objects.filter(is_valid=True).paginate(page=page, per_page=4)
    return render_template("admin/index.html", page_data=page_data)


    # 添加路由,因为需要返回到admin主页面所以需要支持post方法
    @app.route('/admin/add/', methods=['GET', 'POST'])
    def add():
        """ 新增新闻 """
        form = NewsForm() # 实例化表单
        if form.validate_on_submit():# 如果提交表单
            n1 = News(
                title=form.title.data,# 获取表单栏目中的数据分别赋值
                content=form.content.data,
                img_url=form.img_url.data,
                news_type=form.news_type.data
    )
            n1.save()# 进行保存
            flash("新增成功")# 弹出对话框
            return redirect(url_for('admin'))# 跳转到admin路由
        return render_template("admin/add.html", form=form)

    # 从前台传入需要修改的主键
    @app.route('/admin/update/<pk>/', methods=['GET', 'POST'])
    def update(pk):
        """ 新增新闻 """
        obj = News.objects.filter(pk=pk).first()# 通过主键获取对象
        if obj is None:
            abort(404)   # if 对象是空,推出到404
        form = NewsForm(obj=obj)# 将对象返回到页面
        if form.validate_on_submit():# 提交表单将表单的值赋值给查出来的对象
            obj.title = form.title.data
            obj.content = form.content.data
            obj.news_type = form.news_type.data

            obj.save()# 保存
            flash("修改成功")
            return redirect(url_for('admin'))# 跳转到admin路由
        return render_template("admin/update.html", form=form)

# 通过前台传入pk值,查出数据
@app.route('/admin/delete/<pk>/', methods=['POST'])
def delete(pk):
    """ 新增新闻 """
    if request.method == 'POST':
        obj = News.objects.filter(pk=pk).first()
        if obj is None:
            return 'no'# 通过前端的Ajax获取传入的值,判断是否为yes,是yes的话,将所选对象隐藏,否则弹出删除失败
        obj.is_valid = False
        obj.save()
        return 'yes'
    return 'no'
海思图像质量之HiPQTool调试 文章目录一. HiPQTool 界面二. 图像调试三. 将调试参数写入程序中 一. HiPQTool 界面 二. 图像调试 三. 将调试参数写入程序中 阅读详情

相关推荐

德国冯哈勃 Faulhaber2342L012空心杯减速电机带编码器

为了制作平衡车,我在淘宝上面买了一个 Faulhaber2342L012空心杯减速电机电机,具体参数如下: 一:电机参数 型    号:德国冯哈勃Faulhaber带编码器空心杯减速电机2342L012  12V每分 钟 120转 工作电压: 12V 空载转速:8100RPM(转每分钟) 减速后速:120RPM(转每分钟) 直     径:30mm

u011511430的专栏 1万+

python操作mongodb

一,说明登录后复制 使用pymongo和mongoengine,就是基本的curd 参考链接: pymongo 文档: https://www.mongodb.com/zh-cn/docs/languages/python/pymongo-driver/current/read/specify-a-query/ mong...

cnzzs的博客 459

产生式系统的完整示例——医疗诊断系统(附python代码)

发烧(Fever)、咳嗽(Cough)、皮疹(Rash)、喉咙痛(SoreThroat)、头痛(Headache)、流涕(RunnyNose)、呼吸困难(ShortnessOfBreath)、白细胞计数高(HighWBC)、接触流感患者(ContactFlu)、接触麻疹患者(ContactMeasles)。(2)若规则库中存在尚未使用过的规则,而且它的前提(前件)可与综合数据库中的已知事实匹配,则转第(3)步;(3)执行当前选中的规则,并对该规则做上标记,把该规则执行后得到的结论送入综合数据库中。

搏博的专栏 1701

python封装-mongoengine分页

mongoengine分页 # -*- coding: utf-8 -*- import math from mongoengine.queryset import QuerySet __all__ = ("Pagination") class Pagination(object): """ This is class for paginate """ ...

loco_python 1874

【Python脚本】Python自动大麦网抢票,准点原价秒杀演唱会门票,拒绝黄牛交易!从我做起!!!1

你是否错过了周杰伦的票,最近又没抢到五月天的票,不要太难过,今晚有张学友的票,后天还有张杰的票,加油哦!

weixin_45841831的博客 6万+

MuJoCo新手必看:5分钟搞定你的第一个机器人仿真(附Python代码)

本文为零基础新手提供了一份详尽的MuJoCo物理仿真引擎入门指南。从环境搭建、MJCF模型文件解析,到编写Python控制代码,手把手教你5分钟内创建并运行第一个机器人仿真。内容涵盖双摆模型控制与自定义四轮小车构建,帮助你快速掌握这一高性能开源工具,迈出机器人学与强化学习仿真的第一步。

weixin_29032489的博客 653

MongoDB CRUD(insert、update、remove、find)

1,insert 创建document(文档) 并添加记录        db.collection.insert({"name":"张三"}) 插入指定document的数据        db.collection.insert({"name":"李四"})   2,update   更新指定document的数据符合条件的数据        语法: db.collectio...

luorufeng的专栏 348

MATLAB对pcap文件抓包的读取

应用范围 常用的雷达信号,无线网通信信号的格式大多为pcap、wj文件,这里记录一下MATLAB读取pcap文件的方法,具体处理过程及读取协议针对不同的雷达有不同的处理方式,在这里不做说明。 程序 clc;clear;close all; %% 文件位置 filename= 'E:\File\JOB\JOB_1\data.pcap'; fid = fopen(filename,'r'); % 打开包 tmpPack = fread(fid,1350); % 只读前1350个数 读到

诗酒趁年华的博客 3578

pythonmongodb分页查询语句_python | mongodb 常用命令

一、MongoDB数据库常用命令1、Help查看命令提示helpdb.help();db.yourColl.help();2、切换/创建数据库use raykaeso; 当创建一个集合(table)的时候会自动创建当前数据库3、查询所有数据库show dbs;4、删除当前使用数据库db.dropDatabase();5、从指定主机上克隆数据库db.cloneDatabase(“127.0.0.1”...

weixin_39748183的博客 510

基于未来出行解决方案的场景实例:城市空中交通(UAM)的飞行路径规划与避障

本文介绍了使用Simulink进行城市空中交通(UAM)飞行路径规划与避障的仿真方法。主要内容包括:1)UAM系统架构与核心挑战;2)详细建模步骤,从城市3D环境构建到飞行器动力学模拟;3)全局路径规划(A*/RRT*)和局部避障(DWA/APF)算法实现;4)多机协同与冲突解决;5)关键场景仿真与性能评估;6)高级功能拓展方向。通过Simulink的数字孪生系统,可有效验证UAM在复杂城市环境中的可行性,为未来立体交通发展提供技术支撑。

xiaoheshang_123的博客 257

2026 蓝牙技术趋势展望:信道探测、Auracast、高吞吐 HID 与 AI 融合引领行业变革

蓝牙技术2026年展望:信道探测、Auracast广播音频和AI融合将引领创新。蓝牙信道探测技术将实现亚米级精确定位,在工业资产追踪和汽车数字钥匙领域大显身手。Auracast广播音频将持续拓展公共场所应用,提升音频包容性体验。高数据吞吐量和超低延迟功能将支持AR/VR等新兴场景。AI与蓝牙的深度融合将推动可穿戴设备智能化发展,实现实时健康监测和个性化音频服务。蓝牙技术凭借其多功能性和创新力,正成为连接万物的关键技术,持续推动行业变革和生活品质提升。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 113

菜鸟的mongoDB学习---(三)MongoDB 的增、删、改、查(insert、remove、update、find)

插入 insert MongoDB中文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。 首先我们先选择数据库 > use NewsDB switched to db NewsDB > 下面我们先定义一个文档 > document = ({"name":"jingdong","a

京东放养的爬虫 2305

宇树G1开发实践--PPT汇报(遥控版)

本文介绍了一种基于遥控器交互的机器人演示控制系统。系统通过DDS中间件接收遥控器信号,采用位掩码边沿检测技术实现按键精准响应,将不同按键映射为播放控制命令(暂停/重播、跳转、跳过等)。核心交互逻辑包含主播放循环、命令处理和暂停机制,支持播放过程中的实时控制。与自动顺序播放版相比,该系统显著提升了演示灵活性,适用于需要人机互动的演讲场景。使用前需确保网络连接和设备安全,并熟悉按键功能映射。该系统实现了专业级的人机协同演示体验。

m0_47999117的博客 680

Python —— 操作MongoDB

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

weixin_44451672的博客 576

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【MongoDB】_01 介绍和基本使用

mongo简介和使用

乖乖宇宙无敌 1378

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

五 Python爬虫之MongoDB以及Python整合MongoDB

MongoDB入门 MongoDB的权限管理 mongodb和python交互 pymongo的使用方式

东风麦芽糖 667

01:MongoDB基础

1.1 MongoDB简介   1、特点       1.MongoDB的提供了一个面向文档存储,操作起来比较简单和容易。       2.你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Ning",Address="Beijing")来实现更快的排序。       3.你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。      ...

weixin_30668887的博客 162

python3、mongoDB的安装

bin已经编译成功,可以直接使用。

m0_72618941的博客 1319

用python向mongodb插入数据_菜鸟如何用python操作MongoDB?立马让你学会

今天分享给大家的是用python操作MongoDB,一步一步带着你进行学习,保证你是新手也能学得会,快来看吧:MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档、数组及文档数组,非常灵活。在这一节中,我们就来看看Python3下MongoDB的存储操作。1.准备工作在开始之前,请确保已经安装好了Mo...

weixin_39580950的博客 2448

MongoDB01——安装MangoDB

一、MongoDB的下载 到MongoDB的官网——https://www.mongodb.com/download-center/community,选择要下载的版本,点击Download 二、安装: (1)点击安装文件,一路next (2)启动服务端: (2.1)进入MongoDB的安装目录,然后进入data文件夹,创建子文件夹db,用来存储数据目录 (2.2)打开...

weixin_30298497的博客 155

python mongodb_Python操作Mongodb

MongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。1.创建连接import pym...

weixin_39842682的博客 262

Python爬虫数据写入MongoDB

除了插入数据,MongoDB还支持更新、查询和删除等操作,我们可以根据不同的业务需求选择相应的方法进行操作。总之,Python和MongoDB的结合可以帮助我们实现高效的数据爬取和存储,为数据分析和挖掘提供了良好的基础。上述代码中,我们定义了一个包含三个书籍信息的列表,使用insert_many()方法将这些书籍信息批量插入到MongoDB中,并打印出新插入数据的ID。在上述代码中,我们使用insert_one()方法将字典类型的数据插入到MongoDB中,并打印出新插入的数据的ID。

ju7ran的博客 2986

用Django全栈开发(进阶篇)——01. 如何让Django连接MongoDB

大家好,这是皮爷给大家带来的最新的学习Python能干啥?之Django教程的进阶版。 在之前《用Django全栈开发》系列专辑里面,皮爷详细的阐述了如何编写一个完整的网站,具体效果可以浏览线上网站:Peekpa.com 从进阶篇开始,每一篇文章都是干货满满。这一节,我们来讲述一下,在Django中,如何连接到MongoDB,并操作。 Peekpa.com的官方地址:http://peekpa.com 皮爷的每一篇文章,都配置相对应的代码。这篇文章的代码对应的Tag是“Advanced_01”。 前瞻回顾

皮克啪的铲屎官 1347

MongoDB介绍-01

什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。 在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档...

汣栀的博客 285

01-MongoDB基础运维

Q: 什么是MongoDB? A: 一个以 JSON 为数据模型的文档数据库。Q: 为什么叫文档数据库? A: 文档来自于“JSON Document”,并非我们一般理解的 PDF,WORD。Q: 谁开发MongoDB? A: 上市公司 MongoDB Inc.,总部位于美国纽约。Q: 主要用途有哪些? A: OLTP\OLAP数据库,类似于 Oracle, MySQL,海量数据处理,数据平台。Q: 主要特点是什么? A: 无模式或可选。友好的JSON数据模型,开发方便。Q: MongoDB 是免费的吗?

weixin_42257277的博客 259

技能补全之Python操作MongoDB

摘要: 本文介绍了Python操作MongoDB的方法,涵盖MongoDB的数据存储形式(文档型数据库,类似JSON格式)及其操作符分类(比较、逻辑、数组等)。重点演示了通过pymongo库连接本地MongoDB的步骤:创建客户端MongoClient、获取数据库和集合对象,对目标文档集合进行增删改查,以及如何在筛选条件中使用操作符。

御承扬的博客 733
上一篇: Python系列之MySQL--01.基础知识
下一篇: Python爬虫之scrapy--01爬取伯乐网文章
Young-zhou
博客等级 码龄10年 10粉丝 49原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值