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

Mit*_*ops 0 python eval mongodb setattr pymongo

我习惯于在pymongo中这样做,作为访问特定数据库的一种方法:

import pymongo

connection = pymongo.MongoClient()
db = connection.DBNAME
Run Code Online (Sandbox Code Playgroud)

然后,我现在想要能够连接到通过变量命名的数据库,并着眼于循环一系列数据库.所以类似于:

dbname = 'DBNAME'

connection = pymongo.MongoClient()
db = eval('connection.' + dbname)
Run Code Online (Sandbox Code Playgroud)

我被告知eval()偶尔会成为魔鬼,应该避免.如何使用setattr()或其他解决方案执行此操作?就像是...

dbname = 'DBNAME'

connection = pymongo.MongoClient()
db = setattr(connection, '??name??', dbname)
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 6

你想要的getattr不是setattr.

db = getattr(connection,dbname)
Run Code Online (Sandbox Code Playgroud)

如果您知道它的名称,那么设置属性setattr的方法在哪里,如果您知道它的名称,则可以获取属性.getattr

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

db = connection.DBNAME
db = getattr(connection,'DBNAME')
Run Code Online (Sandbox Code Playgroud)