在没有eval()的情况下在pymongo中设置mongo数据库。也许setattr()?

时间:2013-03-07 18:41:52

标签: python mongodb eval pymongo setattr

我习惯于在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)

1 个答案:

答案 0 :(得分:6)

您需要getattr,而不是setattr

db = getattr(connection,dbname)

setattr是一种设置属性的方法,如果您知道它的名称,getattr是一种获取属性的方法知道它的名字。

换句话说,以下是100%等价物:

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