micromongoでは、検証を実行することができ、簡単なORMスタイルのクラスを作成し、文書へのドットのアクセスを許可する、自動ラップクエリセットの結果、そしてあなたにフックを保存プリ/ポストを与えることができますpymongo周りの小さな層である。
それは念頭に置いてmicroframeworksで設計されていますが、アプリケーションやフレームワークに依存しないですそれは。それは、pymongoの使用を簡素化し、共通のイディオムのためのツールを提供し、あなたのデータ構造からpymongoやMongoDBのを曖昧にしないことを意味している。
あなたが問題を開いたり、micromongoのgithubの上のプル要求を送信するために歓迎されている
micromongoはあなたのために動作しない場合があります簡素化の名の下に、いくつかの設計上の決定を行います:
  - &NBSP。 micromongoは単一のグローバルな接続を維持し、だから、複数のMongoDBサーバーに接続モデルを持つことができません
  - &NBSP。モデル名とmicromongoモデルでは動作しません文書の属性名のhandfullがあります。これらは、完全なドキュメントで説明します
  - &NBSP。あなただけのコレクションごとに1つのモデルを持つことができます
のの入門
micromongoでオフを開始するには、ちょうどそれをインポートします。
>>> micromongoのインポートから、モデルを接続
>>> C =接続()
接続pymongoのConnectionオブジェクトと同じ引数を取り、それが自動的に適切なモデルクラスに包まれたクエリ結果を返そうとすることを除いて、ほとんど同じように動作します。あなたはきれいな、標準のConnectionオブジェクトをしたい場合は、この呼び出しを介して作成した接続オブジェクトがキャッシュされ、さまざまなORMスタイルの施設で使用される、などModel.save()、Model.proxy、のように、あなたは簡単に1を得ることができます:
>>> micromongoインポートclean_connectionから
>>>クリーン= clean_connection()
clean_connectionが引数を取らないと、常に現在micromongo接続と同じ設定でクリーンConnectionクラスを返すことに注意してください。
これらの接続オブジェクトを使用すると、データベースを作成またはものは何でもあなたが通常のpymongoオブジェクトの場合と行うことができます:
>>> DB = c.test_db
>>>コレクション= db.test_collection
>>> collection.save({"DOCID":1、 "失敗":偽})
>>> collection.find_one()
{u'_id ':ObjectIdが(' ... ')、u'fail':偽、u'docid ':1}
また、宣言型のスタイルで特定のコレクションのために、独自のモデルを宣言することができます。
>>>クラスTestModel(モデル):
       コレクション= 'test_db.test_collection」
>>> collection.find_one()
これらのクラスは、それらをはるかに便利に使用することができ辞書に対する追加機能の数を持っている。ドキュメントキーは、すべての属性としてアクセス可能です。
>>> T = collection.find_one()
>>> t.fail
偽
>>> t.docid
1
文書はまた、簡単にデータベースに永続化されています。
>>> t.docid = 17
>>> t.save()
>>> clean.test_db.test_collection.find_one()
{u'_id ':ObjectIdが(' ... ')、u'fail':偽、u'docid ':17}
の定義モデルの
上記、コレクション属性は、当社のFooモデルに割り当てられていた。これはしかし、ショートカットだった。データベースとコレクションが個別に割り当てられている場合、モデルは完全なコレクション名を把握することができます。収集し、データベースが存在しない場合は、micromongoは、モデルのクラスとモジュール名に基づいてそれを把握しようとします。例えば、blog.Postはblog.postになる、またはstream.StreamEntryはstream.stream_entryになります。明示的、暗黙的よりも優れている、それはあなたが手動でコレクションを設定することを奨励だ。
データベースから結果を梱包し、開梱のほかに、モデルもデフォルトを定義し、モデルを保存する前に検証を実行することができます仕様ドキュメントを定義することができます。些細なブログ投稿のモデルをしてください。
>>> micromongo.specインポートから*
>>>クラスポスト(モデル):
       コレクション= 'test_db.blog_posts」
       スペック= dictの(
           著者=フィールド(必須= TRUE、デフォルト= 'jmoiron」、タイプ= basestring)、
           タイトル=フィールド(必須=偽、デフォルト= ''、種類= basestring)、
           公表=フィールド(必須= TRUE、デフォルト= Falseを、タイプ= [TRUE、FALSE])、
           ボディ=フィールド(タイプ=ユニコード)、
           タイムスタンプ=フィールド()、
        )
>>> P = Post.new()
>>> P
<ポスト:{'タイトル':uは ''、 '著者':u'jmoiron '、'公開さ ':偽}>
いくつかのことは、ここで起こっている。デフォルトを持っているフィールドは、彼らが必要とされているかどうか、そのデフォルトに初期化されます。必須フィールドがデフォルトを持っていない場合は、Noneに初期化だ。
フィールドが値をとり、TrueまたはFalse、1以上の塩基の種類、または1つ以上の値を返す呼び出し可能であることができ、どちらのタイプの引数を取ることができる。一つ以上の種類が指定されている場合、でisinstance値が正しいタイプであることをテストするために使用される。一つ以上の値が指定されている場合、フィールド値はその値のセットに含まれていることを確認する、列挙型として機能する。全くタイプが指定されていない場合はこれは必須と不在されていない限り、検証は常にフィールド上を通過する。
P内のフィールドが無効な型が与えられている場合、ValueErrorが送出されます。
>>> p.title = 10
>>> P.SAVE()
トレースバック(最新の呼び出し最後):
&NBSP; ...
送出:キー仕様と一致しませんでした:['タイトルを']
>>>デルp.author
>>> P.SAVE()
トレースバック(最新の呼び出し最後):
&NBSP; ...
送出:欠落しているフィールド:['著者']、無効なフィールド:['タイトル']
>>> p.title = '私の最初はBlogPost」
>>> p.author = 'jmoiron」
>>> p.published = TRUE
>>> p.body = uは「これは私の最初のブログの記事..&NBSPであり、私はとても興奮している!」
>>> P.SAVE()
のファインダの
利便性とドライのために、ファインダは、右のコレクションに対して検索を発行することをmicromongoのカーソルを使用しますクラスメソッドです。この方法は、正確にpymongoのCollection.findと同じように動作します。
micromongoのわずかに変更されたカーソルのクラスには、すべてのカーソル(見つけ、それはカーソルを返す場合は、オフに連鎖何でも)が利用できるジャンゴ風のORDER_BY方法になります。あなたはオプションの先頭で、1つまたは複数のフィールド名を渡すことができます ' - '、昇順または降順によって物事をソートする。
これらの変更は、あなたがそれをインポートすることなく、pymongoの電力の大部分を使用できるように、そして、あなたのデータの位置の不必要な繰り返しを避けることができます。
フィールドサブクラス化
あなたがやりたいこと、自分のフィールドを作成することをお勧めします。フィールドのサブクラスは、受信した値を取り、彼らが望むが、それを変換することができますフック関数のpre_validateを持っている。フィールドが実際に存在している場合にのみ動作することに注意してください。そうDateTimeField型にauto_now_addような何かを得るために、あなたはそれが必要なようにしたいと、そのpre_validateはdatetime.datetime.now()にNoneを切らない必要があります。
の要件の:。
- のPythonます。
コメントが見つかりません