0

我已经习惯在 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)
4

1 回答 1

6

你想要getattr,没有setattr

db = getattr(connection,dbname)

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

换句话说,以下是 100% 等效的:

db = connection.DBNAME
db = getattr(connection,'DBNAME')
于 2013-03-07T18:45:03.360 回答