详解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日

相关文章

  • SQLite数据库安装及基本操作指南

    SQLite数据库安装及基本操作指南 简介 SQLite是一款轻量级的关系型数据库管理系统。它可以嵌入到应用程序中,不需要独立运行,因此在移动设备和桌面应用程序中应用广泛。 本文将介绍如何安装SQLite,并提供SQLite基本操作指南。 安装SQLite Windows平台 1.访问SQLite官方网站https://www.sqlite.org/down…

    database 2023年5月22日
    00
  • SQL Server 触发器实例详解

    SQL Server 触发器实例详解 什么是SQL Server触发器? SQL Server 触发器是一段特殊的代码,可以自动地在特定情况下执行。当执行到 SQL Server 数据库上的特定动作时,触发器将会被激活,并执行预定义好的代码。触发器通常被用来在数据库发生变化时执行额外的自定义代码。 SQL Server 触发器的分类 SQL Server 触…

    database 2023年5月21日
    00
  • PHP分页显示制作详细讲解

    让我来详细讲解一下“PHP分页显示制作详细讲解”的完整攻略。 什么是分页显示? 在Web开发中,当数据量很大的时候,我们需要将数据进行分页显示,将大量数据分成若干页,每页显示一定数量的数据,以方便用户查看和浏览。 分页显示的制作方式 下面是使用PHP实现分页显示的步骤: 连接数据库 在使用PHP实现分页显示之前,我们首先需要连接数据库。我们可以使用以下命令连…

    database 2023年5月22日
    00
  • 解读Mapper与Mapper.xml文件之间匹配的问题

    “解读Mapper与Mapper.xml文件之间匹配的问题”主要涉及到MyBatis框架中Mapper接口与Mapper.xml文件的对应关系。以下为完整攻略: 1. Mapper接口与Mapper.xml文件的命名规则 Mapper接口的命名规则为:与Mapper.xml文件名相同,只是将.xml改为了java。例如,在Mapper.xml文件中定义一个操…

    database 2023年5月21日
    00
  • 整理一下SQLSERVER的排序规则

    整理一下SQLSERVER的排序规则 在SQLSERVER中,排序规则指的是确定如何对文本和字符数据进行排序的规则集。在查询中,通过指定排序规则可以控制查询结果集的顺序,并使排序结果与预期一致。下面就介绍一下SQLSERVER排序规则的相关要点。 排序规则的类型 SQLSERVER中的排序规则主要分为两种类型:“二进制排序规则”和“区分大小写排序规则”。其中…

    database 2023年5月21日
    00
  • Ubuntu手动安装mysql5.7.10

    下面我给你详细讲解一下“Ubuntu手动安装mysql5.7.10”的完整攻略。 步骤一:下载安装包 首先需要到MySQL官方网站下载MySQL 5.7.10的安装包,可以使用wget命令进行下载: wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.10-linux-glibc2.5-x…

    database 2023年5月22日
    00
  • 如何使用Python在MySQL中创建表?

    要使用Python在MySQL中创建表,可以使用Python的内置模块sqlite3或第三方库mysql-connector-python。以下是使用mysql-connector-python在MySQL中创建完整攻略: 连接 要连接到MySQL,需要提供MySQL的主机、用户名、和密码。可以使用以下代码连接MySQL: mysql.connector m…

    python 2023年5月12日
    00
  • linux下动态网站维护基本命令小结

    针对“linux下动态网站维护基本命令小结”的完整攻略,可以按照以下步骤操作: 1. 登录服务器 首先要登录到服务器上,可以通过ssh命令来进行登录。示例如下: ssh username@your-server-ip 其中username是你服务器的登录账号,your-server-ip是你服务器的IP地址。根据提示输入密码即可登录到服务器。 2. 进入网站…

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