เป็นไปได้ไหมที่จะใช้ Variable สำหรับชื่อคอลเลกชันโดยใช้ pymongo? ตัวอย่างเช่น:
col = 'my_collection'
db.col.update()
เป็นไปได้ไหมที่จะใช้ Variable สำหรับชื่อคอลเลกชันโดยใช้ pymongo? ตัวอย่างเช่น:
col = 'my_collection'
db.col.update()
คุณสามารถใช้ได้:
col = 'my_collection'
db[col].update()
คุณกำลังพยายามเรียกวิธีการจากสตริง สิ่งนี้ไม่เฉพาะเจาะจงกับ pymongo
คุณสามารถใช้ getattr เพื่อดูว่ามีสตริงเป็นแอตทริบิวต์บนอ็อบเจ็กต์ db
ของคุณหรือไม่ จากนั้นจึงเรียกสตริงนั้น
e.g.
my_collection = getattr(col, 'my_collection')
my_collection.update()
แก้ไข: โปรดทราบว่าการใช้วิธี getattr ช่วยให้สามารถจัดการข้อยกเว้นในกรณีที่สตริงไม่ใช่วิธีการหรือแอตทริบิวต์ของ col
คำตอบของ Ashoka Lella นั้นสมบูรณ์แบบ สิ่งที่เพิ่มเติมอีกเล็กน้อยคือการมีข้อความนี้ในคลาสของโมเดลขวดของคุณ
__collection__="default" #Any default collection, which may or may not be used by the application
เพียงเพราะคอลเลกชันของคุณอยู่ในตัวแปร ไม่ได้หมายความว่าคุณสามารถข้ามคำจำกัดความของแอตทริบิวต์ คอลเลกชัน ได้ ฉันกำลังวางโค้ดของฉันด้านล่างตรงที่ฉันใช้วิธีนี้
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])