摘要:查询数据查询所有数据使用方法查询满足某些条件的数据其中,方法会取出满足条件的第条记录。本文由发表于个人博客,采用自由转载保持署名非商用禁止演绎协议发布。非商业转载请注明作者及出处。本文标题为插件系列本文链接为更多阅读
简介
MongoDB 是一个文档型数据库,是 NoSQL (not only SQL) 的一种,具有灵活、易扩展等诸多优点,受到许多开发者的青睐。MongoEngine 是一个用来操作 MongoDB 的 ORM 框架,如果你不知道什么是 ORM,可以参考 Flask-SQLAlchemy 一节。在 Flask 中,我们可以直接使用 MongoEngine,也可使用 Flask-MongoEngine ,它使得在 Flask 中使用 MongoEngine 变得更加简单。
安装使用 pip 安装,如下:
$ pip install flask-mongoengine使用
在使用之前,请确保 mongo 服务已经开启。
配置我们需要配置 MongoDB 的相关参数,以便我们能访问数据库。
# -*- coding: utf-8 -*- from flask import Flask from flask_mongoengine import MongoEngine app = Flask(__name__) app.config["MONGODB_SETTINGS"] = { "db": "test", "host": "127.0.0.1", "port": 27017 } db = MongoEngine(app)
上面的代码中,我们在 app.config 的 MONGODB_SETTINGS 字典中配置了数据库、主机和端口。如果数据库需要身份验证,那我们需要在该字典中添加 username 和 password 参数,比如:
app.config["MONGODB_SETTINGS"] = { "db": "test", "username":"admin", "password":"12345" }
另外,上面的配置也可以改成下面的方式:
app.config["MONGODB_DB"] = "test" app.config["MONGODB_HOST"] = "127.0.0.1" app.config["MONGODB_PORT"] = 27017 app.config["MONGODB_USERNAME"] = "admin" app.config["MONGODB_PASSWORD"] = "12345"
如果我们想在应用初始化前配置数据库,比如使用工厂方法,可以类似这样做:
from flask import Flask from flask_mongoengine import MongoEngine db = MongoEngine() ... app = Flask(__name__) app.config.from_pyfile("config.json") db.init_app(app)定义数据模型
接下来,我们需要定义数据模型。这里,我们以一个 Todo 数据库为例,数据模型定义如下:
from datetime import datetime class Todo(db.Document): meta = { "collection": "todo", "ordering": ["-create_at"], "strict": False, } task = db.StringField() create_at = db.DateTimeField(default=datetime.now) is_completed = db.BooleanField(default=False)
在上面的代码中,我们定义了一个 Todo 类,meta 字典设置了 collection,ordering 和 strict,其中 ordering 的值可以指定你的 QuerySet 的默认顺序,strict 的值指定是否使用严格模式,默认值是 True,也就是使用严格模式,这就意味着如果数据库的记录如果存在某些字段没有在我们的数据模型中声明,那程序在运行时会产生一个 FieldDoesNotExist 的错误。因此,我们的数据模型定义最好跟记录中的字段保持一致。
查询数据查询所有数据使用 all() 方法
todos = Todo.objects().all()
查询满足某些条件的数据
task = "cooking" todo = Todo.objects(task=task).first()
其中,first() 方法会取出满足条件的第 1 条记录。
添加数据添加数据使用 save() 方法
todo1 = Todo(task="task 1", is_completed=False) todo1.save()数据排序
排序使用 order_by() 方法
todos = Todo.objects().order_by("create_at")更新数据
更新数据需要先查找数据,然后再更新
task = "task 1" todo = Todo.objects(task=task).first() # 先查找 if not todo: return "the task doesn"t exist!" todo.update(is_completed=True) # 再更新删除数据
删除数据使用 delete() 方法:先查找,再删除
task = "task 6" todo = Todo.objects(task=task).first() # 先查找 if not todo: return "the task doesn"t exist!" todo.delete() # 再删除分页
分页可结合使用 skip() 和 limit() 方法
skip_nums = 1 limit = 3 todos = Todo.objects().order_by( "-create_at" ).skip( skip_nums ).limit( limit )
使用 paginate() 方法
def view_todos(page=1): todos = Todo.objects.paginate(page=page, per_page=10)
本文完整的代码在这里。
更多阅读本文由 funhacks 发表于个人博客,采用 Creative Commons BY-NC-ND 4.0(自由转载-保持署名-非商用-禁止演绎)协议发布。
非商业转载请注明作者及出处。商业转载请联系作者本人。
本文标题为: Flask 插件系列 - Flask-SQLAlchemy
本文链接为: https://funhacks.net/2016/11/...
flask-mongoengine
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/44236.html
摘要:环境或使用以下命令安装会出现以下错误定为中的错误行是在读取文件时发生错误,此文件为,其为帮助说明文档。粗暴一点,将其中的内容删除。上下载源码包。运行如下命令安装 环境: windows 10、python 3.5、flask-mongoengine 0.8.2或0.9.0 使用以下命令安装 flask-mongoengine pip install flask-mongoengine ...
摘要:演示图社是基于的图床和图片浏览网站源码,也可以用作套图网站。网站采用作为数据库,图片也储存于。特点注册用户可以认领未注册用户的图片,进行相关信息编辑。部署要求相关的支持见部署方法提供了配合的配置文件。 TUSHE 演示:http://tushe.org GitHub:https://github.com/ericls/tushe 图社(TUSHE)是基于 FLask 的图床和图片浏...
摘要:演示图社是基于的图床和图片浏览网站源码,也可以用作套图网站。网站采用作为数据库,图片也储存于。特点注册用户可以认领未注册用户的图片,进行相关信息编辑。部署要求相关的支持见部署方法提供了配合的配置文件。 TUSHE 演示:http://tushe.org GitHub:https://github.com/ericls/tushe 图社(TUSHE)是基于 FLask 的图床和图片浏...
摘要:程序中最常用的莫过于关系型数据库了,也称数据库。对象是类的实例,表示程序使用的数据库。本文由发表于个人博客,采用自由转载保持署名非商用禁止演绎协议发布。非商业转载请注明作者及出处。本文标题为插件系列本文链接为更多阅读 简介 Web 开发中,一个重要的组成部分便是数据库了。Web 程序中最常用的莫过于关系型数据库了,也称 SQL 数据库。另外,文档数据库(如 mongodb)、键值对数据...
摘要:带附件的邮件有时候,我们发邮件的时候需要添加附件,比如文档和图片等,这也很简单,代码如下邮件服务器地址邮件服务器端口启用上面的代码中,我们通过打开了本机的某张图片,然后通过方法将附件内容添加到对象。 前往本文博客 简介 给用户发送邮件是 Web 应用中最常见的任务之一,比如用户注册,找回密码等。Python 内置了一个 smtplib 的模块,可以用来发送邮件,这里我们使用 Flask...
阅读 1414·2021-11-25 09:43
阅读 2540·2021-09-24 10:30
阅读 3638·2021-09-06 15:02
阅读 3569·2019-08-30 15:55
阅读 3258·2019-08-30 15:53
阅读 1570·2019-08-30 15:52
阅读 2125·2019-08-30 14:21
阅读 1908·2019-08-30 13:55