在pymongo中设置Mongo数据库,不使用eval()。也许用setattr()?

0 投票
1 回答
870 浏览
提问于 2025-04-17 18:18

我之前习惯用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')

撰写回答