Pymongoを使用してコレクション名に変数を使用することは可能ですか?例えば:
col = 'my_collection'
db.col.update()
文字列からメソッドを呼び出そうとしています。これはpymongoに固有のものではありません。
Getattrを使用して、文字列がdb
オブジェクトの属性として存在するかどうかを確認し、それを呼び出すことができます。
例えば.
my_collection = getattr(col, 'my_collection')
my_collection.update()
編集:文字列がcol
のメソッドまたは属性ではない場合、getattrアプローチを使用すると例外処理が可能になることに注意してください。
アショカレラの答えは完璧です。これに追加することの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])