เป็นไปได้ไหมที่จะใช้ Variable สำหรับชื่อคอลเลกชันโดยใช้ pymongo?

เป็นไปได้ไหมที่จะใช้ Variable สำหรับชื่อคอลเลกชันโดยใช้ pymongo? ตัวอย่างเช่น:

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

person ehsan shirzadi    schedule 17.07.2014    source แหล่งที่มา


คำตอบ (3)


คุณสามารถใช้ได้:

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

ข้อมูลอ้างอิง

person Ashoka Lella    schedule 17.07.2014

คุณกำลังพยายามเรียกวิธีการจากสตริง สิ่งนี้ไม่เฉพาะเจาะจงกับ pymongo

คุณสามารถใช้ getattr เพื่อดูว่ามีสตริงเป็นแอตทริบิวต์บนอ็อบเจ็กต์ db ของคุณหรือไม่ จากนั้นจึงเรียกสตริงนั้น

e.g.

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

แก้ไข: โปรดทราบว่าการใช้วิธี getattr ช่วยให้สามารถจัดการข้อยกเว้นในกรณีที่สตริงไม่ใช่วิธีการหรือแอตทริบิวต์ของ col

person Community    schedule 17.07.2014

คำตอบของ 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])

person Ninad Kulkarni    schedule 28.07.2018