W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
近些日子,使用基于文檔的數(shù)據(jù)庫(kù)而不是基于表的關(guān)系數(shù)據(jù)庫(kù)變得越來(lái)越流行。 這一方案展示了如何使用文檔映射庫(kù) MongoKit ,來(lái)與 MongoDB 交互。
這一方案的使用需要一個(gè)可用的 MongoDB 服務(wù)器,并且安裝有 MongoKit 庫(kù)。
使用 MongoKit 有兩種常用的方法,我們將會(huì)逐一介紹:
MongoKit 的默認(rèn)行為是這種顯式調(diào)用的方法。這種方法跟 Django 或者 SQLAlchemy 擴(kuò)展顯示調(diào)用擴(kuò)展大體精神是相同的。
下面是一個(gè) app.py 模塊的例子:
from flask import Flask
from mongokit import Connection, Document
# configuration
MONGODB_HOST = 'localhost'
MONGODB_PORT = 27017
# create the little application object
app = Flask(__name__)
app.config.from_object(__name__)
# connect to the database
connection = Connection(app.config['MONGODB_HOST'],
app.config['MONGODB_PORT'])
要定義您的模型,只需編寫一個(gè)從 MongoKit 導(dǎo)入的 Document 類的子類。如果您 已經(jīng)看過(guò)了 SQLAlchemy 的方案,您可能會(huì)奇怪為什么這里沒(méi)有一個(gè)會(huì)話,甚至沒(méi)有 定義 init_db 函數(shù)。一方面, MongoKit 并沒(méi)有類似會(huì)話這種東西。這有時(shí)會(huì)增加 代碼量,但是同時(shí)也使得數(shù)據(jù)庫(kù)操作非常高效。另一方面, MongoDB 是沒(méi)有模式的。 這意味著您在相同的插入查詢,可以使用不同的數(shù)據(jù)結(jié)構(gòu)。 MongoKit 本身也是沒(méi)有 模式的。但是實(shí)現(xiàn)了一些用來(lái)確保數(shù)據(jù)完整的驗(yàn)證。
以下是一個(gè)文檔的例子 (您可以將這個(gè)也放進(jìn) app.py 文件里):
def max_length(length):
def validate(value):
if len(value) <= length:
return True
raise Exception('%s must be at most %s characters long' % length)
return validate
class User(Document):
structure = {
'name': unicode,
'email': unicode,
}
validators = {
'name': max_length(50),
'email': max_length(120)
}
use_dot_notation = True
def __repr__(self):
return '<User %r>' % (self.name)
# register the User document with our current connection
connection.register([User])
這個(gè)例子向您展示了怎么定義您自己的結(jié)構(gòu)(名為 structure)、一個(gè)最大字符長(zhǎng)度 的驗(yàn)證器以及使用 Monkit 的一項(xiàng)名為 use_dot_notation 的特性。某人情況下 MongoKit 按照字典的方式行為,但是將 use_dot_notation 為真之后,您可以 像您在幾乎所有的 ORM 當(dāng)中那樣,使用點(diǎn)運(yùn)算符來(lái)分割屬性的方式訪問(wèn)您的文檔。
向數(shù)據(jù)庫(kù)里添加數(shù)據(jù)的方法如下所示:
>>> from yourapplication.database import connection
>>> from yourapplication.models import User
>>> collection = connection['test'].users
>>> user = collection.User()
>>> user['name'] = u'admin'
>>> user['email'] = u'admin@localhost'
>>> user.save()
注意,MongoKit 在列的類型方面有些嚴(yán)格,您必須使用一個(gè)通常的 unicode 來(lái) 作為 name 和 email 的類型,而不是普通的 str 類型。
查詢也很簡(jiǎn)單:
>>> list(collection.User.find())
[<User u'admin'>]
>>> collection.User.find_one({'name': u'admin'})
<User u'admin'>
如果您想直接使用 PyMongo 。 您也可以利用 MongoKit 實(shí)現(xiàn)。如果您希望應(yīng)用程序?qū)崿F(xiàn) 最佳的表現(xiàn),您也許希望使用這種方法。注意,例子并沒(méi)有展示配合 Flask 使用的具體 方法。請(qǐng)參考上面 MongoKit 的例子代碼:
from MongoKit import Connection
connection = Connection()
插入數(shù)據(jù)可以使用 insert 方法。我們必須先獲得一個(gè)連接。這跟 在 SQL 的世界使用表有些類似。
>>> collection = connection['test'].users
>>> user = {'name': u'admin', 'email': u'admin@localhost'}
>>> collection.insert(user)
print list(collection.find()) print collection.find_one({‘name’: u’admin’})
MongoKit 將會(huì)為我們自動(dòng)提交修改。
查詢數(shù)據(jù)庫(kù),您要直接使用數(shù)據(jù)庫(kù)連接:
>>> list(collection.find())
[{u'_id': ObjectId('4c271729e13823182f000000'), u'name': u'admin', u'email': u'admin@localhost'}]
>>> collection.find_one({'name': u'admin'})
{u'_id': ObjectId('4c271729e13823182f000000'), u'name': u'admin', u'email': u'admin@localhost'}
返回的結(jié)果也同樣是類字典的對(duì)象:
>>> r = collection.find_one({'name': u'admin'})
>>> r['email']
u'admin@localhost'
關(guān)于 MongoKit 的更多信息,請(qǐng)?jiān)L問(wèn) website.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: