详解python中mongoengine库用法

详解Python中Mongoengine库用法

简介

Mongoengine是Python语言的MongoDB数据ORM库,提供了简单直接的方式给开发人员在Python应用程序中使用MongoDB进行数据存储和访问。

本文将详细讲解Mongoengine库的基本用法,包括安装、连接数据库、定义文档模型、增删改查等操作。

安装

Mongoengine库可以通过pip包管理器进行安装,使用以下命令即可:

```shell script
pip install mongoengine


## 连接数据库

在使用Mongoengine库之前,我们需要先连接MongoDB数据库。在连接MongoDB之前,需要确保MongoDB已经启动。

Mongoengine使用类似于URI的连接字符串来连接MongoDB,格式为:

mongoengine.connect(db='数据库名称', host='主机地址', port=端口号)


以下是连接MongoDB的示例代码:

```python
import mongoengine

mongoengine.connect(db='mydatabase', host='localhost', port=27017)

定义文档模型

在Mongoengine中,文档模型(Document Model)是指描述数据结构和相关方法的类。每个模型对应MongoDB数据库中的一个集合(Collection)。

使用Mongoengine创建文档模型需要继承mongoengine.Document类。

以下是定义一个用户文档模型的示例代码:

import mongoengine

class User(mongoengine.Document):
    name = mongoengine.StringField(required=True)
    age = mongoengine.IntField(default=0)
    email = mongoengine.EmailField(required=True)

在上面的示例代码中,定义了一个包含三个字段的用户文档模型:

  • name:字符串类型,必填字段,表示用户名
  • age:整数类型,可选字段,表示用户年龄,默认值为0
  • email:邮件地址类型,必填字段,表示用户邮箱

增删改查

Mongoengine提供了灵活且易用的API进行数据的增删改查。以下是Mongoengine的常用API:

插入数据

想要插入一条记录,只需要创建一个文档对象并调用文档对象的save()方法。以下是插入一条记录的代码示例:

user = User(name='Tom', age=18, email='tom@example.com')
user.save()

查询数据

Mongoengine提供了多种查询数据的方式,包括按条件查询、排序、分页等。以下是按条件查询的代码示例:

# 查询年龄大于等于18岁的用户
users = User.objects(age__gte=18)

# 查询邮箱为指定值的用户
users = User.objects(email='tom@example.com')

更新数据

Mongoengine可以通过直接替换字段值的形式来更新数据。以下是更新一条记录的代码示例:

user = User.objects(name='Tom').first()
user.age = 20
user.save()

删除数据

Mongoengine提供了多种删除数据的方式,包括按条件删除、删除所有记录等。以下是按条件删除的代码示例:

# 删除年龄大于等于18岁的用户
User.objects(age__gte=18).delete()

示例说明

示例1:使用Mongoengine实现图片上传

以下是使用Mongoengine实现图片上传的完整代码示例:

import os
import mongoengine
from flask import Flask, request, redirect, url_for
from werkzeug.utils import secure_filename

app = Flask(__name__)

app.config['MONGODB_SETTINGS'] = {
    'db': 'mydatabase',
    'host': 'localhost',
    'port': 27017
}

mongoengine.connect(**app.config['MONGODB_SETTINGS'])

ALLOWED_EXTENSIONS = {'png', 'jpg', 'jpeg', 'gif'}

class Image(mongoengine.Document):
    name = mongoengine.StringField(required=True)
    data = mongoengine.FileField(required=True)

def allowed_file(filename):
    return '.' in filename and \
           filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS

@app.route('/', methods=['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        file = request.files['file']
        if file and allowed_file(file.filename):
            filename = secure_filename(file.filename)
            image = Image(name=filename, data=file)
            image.save()
            return redirect(url_for('view_image', filename=filename))
    return '''
    <!doctype html>
    <html>
    <body>
        <h1>Upload a new image</h1>
        <form action="" method=post enctype=multipart/form-data>
            <p><input type=file name=file>
            <input type=submit value=Upload>
        </form>
    </body>
    </html>
    '''

@app.route('/view/<filename>')
def view_image(filename):
    image = Image.objects(name=filename).first()
    if image:
        return """
        <img src="/static/{}" alt="{}">
        """.format(filename, filename)
    return "Image not found"

if __name__ == '__main__':
    app.run(debug=True)

示例2:使用Mongoengine实现日记应用

以下是使用Mongoengine实现日记应用的完整代码示例:

import mongoengine
from flask import Flask, request, redirect, url_for

app = Flask(__name__)

app.config['MONGODB_SETTINGS'] = {
    'db': 'mydatabase',
    'host': 'localhost',
    'port': 27017
}

mongoengine.connect(**app.config['MONGODB_SETTINGS'])

class Diary(mongoengine.Document):
    title = mongoengine.StringField(required=True)
    content = mongoengine.StringField(required=True)

@app.route('/', methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        title = request.form['title']
        content = request.form['content']
        diary = Diary(title=title, content=content)
        diary.save()
        return redirect(url_for('view_diary', diary_id=str(diary.id)))
    else:
        diaries = Diary.objects()
        return '''
        <!doctype html>
        <html>
        <body>
            <h1>Add a new diary</h1>
            <form method="POST">
                <label for="title">Title:</label>
                <input type="text" name="title"><br><br>
                <label for="content">Content:</label>
                <textarea name="content" rows="10" cols="50"></textarea><br><br>
                <input type="submit" value="Save">
            </form>
            <hr>
            <h1>All diaries</h1>
            {}
        </body>
        </html>
        '''.format(''.join(['<p><a href="{}">{}</a></p>'.format(url_for('view_diary', diary_id=str(diary.id)), diary.title) for diary in diaries]))

@app.route('/diary/<diary_id>')
def view_diary(diary_id):
    diary = Diary.objects(id=diary_id).first()
    if diary:
        return '''
        <!doctype html>
        <html>
        <body>
            <h1>{}</h1>
            <p>{}</p>
        </body>
        </html>
        '''.format(diary.title, diary.content)
    return "Diary not found"

if __name__ == '__main__':
    app.run(debug=True)

总结

本文详细讲解了Python中Mongoengine库的基本用法,包括安装、连接数据库、定义文档模型、增删改查等操作。通过两个示例程序的演示,读者可以更好地理解Mongoengine的使用方法以及其在实际应用中的作用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解python中mongoengine库用法 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • 【数据库】7.0 MySQL入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

    1.0 help == ? 帮助指令,查询某个指令的解释、用法、说明等。详情参考博文: 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询  https://www.cnblogs.com/xiaofu007/p/10301005.html  2.0 在cmd命令行中,输入“”ysql –help”,可以查看由mysql…

    MySQL 2023年4月12日
    00
  • springboot使用alibaba的druid数据库连接池错误的问题及解决

    下面我来详细讲解“springboot使用alibaba的druid数据库连接池错误的问题及解决”的完整攻略。 问题描述 在使用Spring Boot项目中使用阿里巴巴的druid连接池进行数据库访问时,可能会遇到以下错误: com.alibaba.druid.pool.GetConnectionTimeoutException: timeout 该错误的原…

    database 2023年5月18日
    00
  • Linux服务器被黑以后的详细处理步骤

    当Linux服务器被黑时,需要采取详细的处理步骤才能确保系统的安全。下面,我将提供一份完整的攻略,包含必要的步骤和示例,帮助您认真处理这个问题。 1. 确认服务器被黑 在开始处理之前,需要先确认服务器是否真的被黑了。以下是一些常见的指标: 系统性能下降或异常 系统日志中出现未知或异常的登录记录 未知的、新的或异常的用户账户 系统文件或配置文件的修改、删除或新…

    database 2023年5月22日
    00
  • sql server定时作业调用Kettle job出错的快速解决方法

    下面是详细讲解“sql server定时作业调用Kettle job出错的快速解决方法”的完整攻略: 背景 在使用SQL Server进行定时作业调用Kettle job时,有时会遇到出错的问题。 问题 出错的现象可能会有很多种,根据不同的情况而不同,比如: 在执行SQL Server作业时,报告了“找不到指定的存储过程或函数sp_executesql”; …

    database 2023年5月21日
    00
  • Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解

    下面是“Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解”的攻略: 1. 概述 在Android应用程序中,我们通常需要进行数据的增删改查操作。此时,我们可以采用SQLite数据库来存储和管理数据。SQLite是一种轻量级的数据库,它以文件的形式存储数据,非常适合用于移动设备。 在Android中,我们可以使用execSQL…

    database 2023年5月21日
    00
  • SQL select distinct的使用方法

    当我们用SQL语言来查询数据时,可能会遇到需要去除重复的数据的情况。那么这个时候,我们就可以使用SELECT DISTINCT语句来完成这个要求。 SELECT DISTINCT语句的基本用法 SELECT DISTINCT语句用于返回唯一不同的值。以下是该语句的基本语法: SELECT DISTINCT column_name FROM table_nam…

    database 2023年5月21日
    00
  • PHP ADODB实现事务处理功能示例

    PHP ADODB是一个为PHP程序开发人员提供高级数据库抽象类库的工具集。其中之一就是实现事务处理功能的类库。以下是实现事务处理的完整攻略: 1. 安装ADODB类库 首先,我们需要安装ADODB类库。可以通过Composer进行安装,Composer是PHP的一个包管理器,可以通过它方便地安装第三方类库。在运行Composer之前,需要先安装Compos…

    database 2023年5月21日
    00
  • 解决Django删除migrations文件夹中的文件后出现的异常问题

    当我们删除Django项目中的migrations文件夹中的某个文件时,可能会出现无法迁移的异常。这是因为Django会根据migrations文件夹中的文件来判断数据库的状态,并根据这些文件进行迁移操作。如果我们手动删除了其中的文件,那么Django就无法正确地推断数据库的状态,从而导致异常。以下是解决该异常问题的攻略: 第一步:清除数据库中的迁移记录 首…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部