web-dev-qa-db-ja.com

pymongoを使用してコレクション名に変数を使用することは可能ですか?

Pymongoを使用してコレクション名に変数を使用することは可能ですか?例えば:

col = 'my_collection'
db.col.update()
26
ehsan shirzadi

以下を使用できます。

col = 'my_collection'
db[col].update()

参照

50
Ashoka Lella

文字列からメソッドを呼び出そうとしています。これはpymongoに固有のものではありません。

Getattrを使用して、文字列がdbオブジェクトの属性として存在するかどうかを確認し、それを呼び出すことができます。

例えば.

my_collection = getattr(col, 'my_collection')
my_collection.update()

編集:文字列がcolのメソッドまたは属性ではない場合、getattrアプローチを使用すると例外処理が可能になることに注意してください。

6
user559633

アショカレラの答えは完璧です。これに追加することの1つは、このステートメントをflaskモデルのクラスに含めることです。

__collection__="default"  #Any default collection, which may or may not be used by the application

コレクションが変数内にあるからといって、collection属性の定義をスキップできるという意味ではありません。この方法で使用した場所に、以下のコードを貼り付けています。

class Collection(Document):
 __collection__ = "collection_1"
 structure = {
    "name": str,
    "email": str,
    "status": bool,
    "extra": dict
 }
 required_fields = ["name", "email"]    
 default_values = {"status": "inactive", "extra": {}}

 def insertDocument(self, data):
    print "model : " + data["collection"]
    db[data["collection"]].insert(data["data"])
    return "from model"

クラス名をdb変数に登録することを忘れないでください-db.register([Collection])

1
Ninad Kulkarni