详解python中mongoengine库用法

yizhihongxing

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

相关文章

  • 数据库其它

    数据库是Web开发中非常重要的一部分,也是存储网站数据的地方。而数据库的其它,指的是数据库中的表、索引、视图、存储过程、触发器等。在使用数据库的过程中,我们需要了解这些其它的概念与用法。 以下是数据库其它的详细攻略: 1. 数据库表 数据库表是数据库中最基本的单位。表是由特定的字段组成的,每个字段有其自己的数据类型。表需要事先定义它所包含的每个字段的名称和数…

    database 2023年5月19日
    00
  • MyBatis 多表联合查询及优化方法

    下面给出详细的”MyBatis 多表联合查询及优化方法”攻略。 1. 简述 MyBatis是一种支持多表联合查询的ORM(对象-关系映射)框架。使用MyBatis进行多表查询时,可以使用一些优化方法来提高查询效率和降低代码的复杂性。 2. 多表联合查询方法 2.1 嵌套查询 嵌套查询是最基本的多表联合查询方法,它是在SQL语句中嵌套SELECT子句,用于从多…

    database 2023年5月19日
    00
  • springboot项目启动后执行方法的三种方式

    让我们开始讲解“springboot项目启动后执行方法的三种方式”。 1. CommandLineRunner 和 ApplicationRunner 接口 CommandLineRunner 和 ApplicationRunner 接口可以让我们在 Spring Boot 项目启动后执行一些特定的任务,这两个接口都只有一个方法 run。区别在于,Comma…

    database 2023年5月18日
    00
  • 大数据相关技术原理资料整理(hdfs, spark, hbase, kafka, zookeeper, redis, hive, flink, k8s, OpenTSDB, InfluxDB, yarn)

    hdfs: hdfs官方文档 深入理解HDFS的架构和原理 https://blog.csdn.net/kezhong_wxl/article/details/76573901 HDFS原理解析(总体架构,读写操作流程) http://www.cnblogs.com/duanxz/p/3874009.html 经典漫画讲解HDFS原理 https://blo…

    Redis 2023年4月11日
    00
  • 如何使用Python实现数据库的事务管理?

    以下是使用Python实现数据库事务管理的完整攻略。 事务管理简介 事务是指一组数据库操作,这些操作要么全部执行成功要么全部执行失败。在Python中,可以使用pymysql库实现数据库事务管理。事务管理可以确保数据库操作的原子性、一致性、隔离性和持久性。 步骤1:连接到数据库 在Python中,可以使用pymysql库连接到MySQL数据库。以下是连接到M…

    python 2023年5月12日
    00
  • Linux VPS配置Web网站环境一键包(LNMP/LAMP/LNMPA)

    Linux VPS配置Web网站环境一键包 Linux VPS是一种基于Linux系统的云服务器,由于其性能高、价格低、易于管理等优点,广受网站建设者和开发者的青睐。在Linux VPS上搭建Web网站环境需要一定的技术和时间成本,为了提高效率,就需要使用一键包进行安装配置。LNMP、LAMP和LNMPA是三种常见的Web网站环境一键包,下面分别介绍它们的安…

    database 2023年5月22日
    00
  • 一步步教你用python连接oracle数据库

    下面我来为您详细讲解“一步步教你用Python连接Oracle数据库”的完整攻略。 1. 安装必要的软件 在进行Python连接Oracle数据库之前,我们需要安装一些必要的软件。这些软件包括: Python环境:我们需要安装Python 3.x版本的环境,可以到Python官网下载对应版本:https://www.python.org/downloads/…

    database 2023年5月21日
    00
  • 在Linux系统上安装数据库监控程序Bugzilla的方法

    下面是在Linux系统上安装数据库监控程序Bugzilla的方法的完整攻略。 安装步骤 1. 确认系统环境 首先需要确认系统环境是否满足Bugzilla的安装要求,需要的运行环境包括: Apache Web 服务器。 Perl 解译器。 MySQL 或 PostgreSQL 数据库。 可以使用以下命令确认Linux系统中是否已安装以上运行环境: # 确认 A…

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