Python Web 7 —— python調用mongodb最佳化,使用mongoengine

來源:互聯網
上載者:User

前言:

        上一篇文章中我們詳細闡述了如何在python中使用pymongo來操作mongodb資料庫,但是直接把對於資料庫的作業碼都寫在指令碼中,顯然會讓應用的代碼耦合性太強,而且不利於代碼的最佳化管理,一般應用都是使用MVC架構來設計的,為了更好地維持MVC結構,我們需要把資料庫操作部分作為model抽離出來,這就需要藉助MongoEngine,這是一個可以操作MongoDB資料庫的對象-文檔映射器(ODM,Object Document Mapper)。


一、安裝mongoengine:

        安裝過程其實很簡單,使用pip外掛程式來安裝,在doc視窗中使用一下指令進行安裝:

pip install mongoengine
        由於我們選擇的web架構是flask,所以我們需要安裝適用於flask的mongoengine,即flask_mongoengine,通過以下指令:

pip install flask_mongoengine


二、使用操作:

1.引入:

        引入flask_mongoengine的內容同時,將datetime也一起引入,這樣儲存資料的時候可以把時間戳記也一併存入:

from flask_mongoengine import *from datetime import datetime
 
2.串連資料庫:

        串連資料庫分為兩種:

        串連本機資料庫:例如串連本機資料庫的名字為LocalDB,可以使用:connect('LocalDB')

        串連指定ip的機器上的資料庫:connect('LocalDB',host='ip地址',username='資料庫使用者名稱',passworld='密碼')

3.聲明資料存放區結構:

        聲明一個繼承自MongoEngine.Document的類,在類中聲明一些屬性,相當於建立一個用來儲存資料的資料結構,即資料已類似資料結構的形式存入資料庫中,通常把這樣的一些類都存放在一個指令碼中,作為應用的Model模組,例如建立一個models.py指令碼:

from flask import Flaskimport datetimefrom flask_mongoengine import MongoEngineapp = Flask(__name__)   #建立一個Flask應用db = MongoEngine(app)   #執行個體化資料庫class Post(db.Document):    author = db.StringField(max_length=50)    title = db.StringField(max_length=120, required=True)    tags = db.ListField(db.StringField(max_length=30))    time = db.DateTimeField(default=datetime.datetime.now())    content = db.StringField()
        這裡聲明了一個類,它繼承自Document類,具有五個屬性,其中在聲明每個屬性的時候其實都可以引入 required這個參數, 當 required=True時,表示建立此類的對象時,必須對該屬性進行賦值。


4.儲存資料:

        根據上述代碼在使用Post類建立對象時,至少要對title屬性進行賦初值,如下我們實現將資料插入資料庫:

from models import Post #引入Post類post = Post(title="test") #建立Post對象post.author = "lsh"         #對象屬性賦值post.save()                     #將資料存入資料庫中
        除了將資料存入資料庫,有時候我們還需要查詢資料庫中的資料或者是對資料庫中資料進行修改,也就是進行 查詢和 更新操作,在mongoengine中這個兩部操作實現方式:
        查詢:posts = Post.objects.all() #返回所有的文檔對象列表

                   posts = Post.objects(title="test") #返回符合查詢條件的對象列表

        更新:post.title="test1" #修改對象屬性

                   post.update()     #更新

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.