在pymongo中设置Mongo数据库,不使用eval()。也许用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 个回答
6
你需要的是 getattr
,而不是 setattr
。
db = getattr(connection,dbname)
这里,setattr
是用来 设置 一个属性的,前提是你知道这个属性的名字;而 getattr
是用来 获取 一个属性的,前提是你也知道这个属性的名字。
换句话说,下面这两者是完全相同的:
db = connection.DBNAME
db = getattr(connection,'DBNAME')