2013-03-07 21 views
0

我一直習慣在pymongo這樣的訪問特定數據庫的手段:在沒有eval()的情況下在pymongo中設置mongo數據庫。也許setattr()?

import pymongo 

connection = pymongo.MongoClient() 
db = connection.DBNAME 

然後查詢db.collectioname.find()等。但是,我現在希望能夠連接到通過變量命名的數據庫,並着眼於循環一系列數據庫。所以像這樣:

dbname = 'DBNAME' 

connection = pymongo.MongoClient() 
db = eval('connection.' + dbname) 

我被教導,eval()偶爾是魔鬼,應該避免。我怎麼能用setattr()或其他解決方案來做到這一點?喜歡的東西...

dbname = 'DBNAME' 

connection = pymongo.MongoClient() 
db = setattr(connection, '??name??', dbname) 

回答

5

你想getattr,不setattr

db = getattr(connection,dbname) 

其中setattr是一種方法,設置的屬性,如果你知道它的名字,getattr是一種方式來獲得一個屬性,如果你知道它的名字。

換句話說,下面是100%相同的:

db = connection.DBNAME 
db = getattr(connection,'DBNAME') 
+0

是的,謝謝你,這是非常有幫助的。我不確定我是否知道數據庫名稱正確屬性。當我輸入'dir(連接)'時,我沒有看到它! – Mittenchops 2013-03-07 20:51:35

相關問題