Apakah mungkin menggunakan Variabel untuk nama koleksi menggunakan pymongo?

Apakah mungkin menggunakan Variabel untuk nama koleksi menggunakan pymongo? Misalnya:

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

person ehsan shirzadi    schedule 17.07.2014    source sumber


Jawaban (3)


Anda dapat gunakan:

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

referensi

person Ashoka Lella    schedule 17.07.2014

Anda mencoba memanggil metode dari sebuah string. Ini tidak spesifik untuk pymongo.

Anda dapat menggunakan getattr untuk melihat apakah string tersebut ada sebagai atribut pada objek db Anda, lalu panggil saja.

e.g.

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

sunting: Perhatikan bahwa menggunakan pendekatan getattr memungkinkan penanganan pengecualian jika string bukan merupakan metode atau atribut col.

person Community    schedule 17.07.2014

Jawaban Ashoka Lella sempurna. Salah satu tambahannya adalah dengan menyertakan pernyataan ini di kelas model labu Anda.

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

Hanya karena koleksi Anda ada dalam variabel, bukan berarti Anda bisa melewatkan definisi atribut koleksi. Saya menempelkan kode saya di bawah tempat saya menggunakan cara ini.

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"

Jangan lupa untuk mendaftarkan nama kelas Anda pada variabel db - db.register([Collection])

person Ninad Kulkarni    schedule 28.07.2018