我习惯于在pymongo中这样做,作为访问特定数据库的一种方式:
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)
答案 0 :(得分:6)
您需要getattr
,而不是setattr
。
db = getattr(connection,dbname)
setattr
是一种设置属性的方法,如果您知道它的名称,getattr
是一种获取属性的方法知道它的名字。
换句话说,以下是100%等价物:
db = connection.DBNAME
db = getattr(connection,'DBNAME')