摘要:查詢數據查詢所有數據使用方法查詢滿足某些條件的數據其中,方法會取出滿足條件的第條記錄。本文由發表于個人博客,采用自由轉載保持署名非商用禁止演繹協議發布。非商業轉載請注明作者及出處。本文標題為插件系列本文鏈接為更多閱讀
簡介
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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/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...
閱讀 1465·2021-11-25 09:43
閱讀 2604·2021-09-24 10:30
閱讀 3673·2021-09-06 15:02
閱讀 3612·2019-08-30 15:55
閱讀 3310·2019-08-30 15:53
閱讀 1706·2019-08-30 15:52
閱讀 2152·2019-08-30 14:21
閱讀 2021·2019-08-30 13:55