Можно ли использовать переменную для имени коллекции с помощью pymongo? Например:
col = 'my_collection'
db.col.update()
Можно ли использовать переменную для имени коллекции с помощью pymongo? Например:
col = 'my_collection'
db.col.update()
Вы можете использовать:
col = 'my_collection'
db[col].update()
Вы пытаетесь вызвать метод из строки. Это не относится к пимонго.
Вы можете использовать getattr, чтобы увидеть, существует ли строка как атрибут вашего объекта db
, а затем вызвать ее.
e.g.
my_collection = getattr(col, 'my_collection')
my_collection.update()
редактировать: обратите внимание, что использование подхода getattr позволяет обрабатывать исключения в случае, если строка не является методом или атрибутом col
.
Ответ Ашоки Леллы идеален. Одним из дополнений к этому является наличие этого оператора в классе вашей модели фляги.
__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])