今天來談談資料庫吧!
我選用MongoDB,
因為在目前興起的NoSQL中MongoDB畢竟還是大宗,
我選用的lib是Flask-mongoengin,
為什麼我要使用Flask-mongoengin 呢?
先看看簡單的Sample:
from app import db
from flask.ext.login import UserMixin
class User(db.Document, UserMixin):
account = db.StringField(required=True)
pwd = db.StringField(required=True)
def get_id(self):
return unicode(self.id)
因為NoSQL的特點之一欄位並不需要事先定義,
這是一種優點也是缺點,
畢竟資料庫的資料還是需要一些基本的驗證與檢查,
而Mongoengine就提供了這些設定與檢查,
因為儲存的是BJSON(Binary Json),
所以就有了Embedded Data Models,
而Mongoengine 在設計schema的時候,
可以針對Embedded Data Models作設計,
from app import db
from flask.ext.login import UserMixin
class User(db.EmbeddedDocument):
account = db.StringField(required=True)
pwd = db.StringField(required=True)
class Users(db.Document, UserMixin):
user = db.EmbeddedDocumentField('User')
name = db.StringField()
class Login(db.Document):
user = db.EmbeddedDocumentField('User')
logintime = db.DateTimeField(required=True)
def get_id(self):
return unicode(self.id)
另外還有一個就是與Flask-WTF的配合上相當的高,
Form表單與後端資料庫欄位名稱都可以設計作Mapping,
在開發上的難度大大降低。
另外在每一個Class可以依照需求寫一些Function來配合使用,
上例是在做Flask-login 的時候回傳的User ObjId值,
彈性大大的提昇。
今天先講到這吧!
待續........