【问题标题】:Set a mongo database in pymongo without eval(). Maybe setattr()?在没有 eval() 的 pymongo 中设置一个 mongo 数据库。也许 setattr()?
【发布时间】:2013-03-07 18:41:52
【问题描述】:

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

【问题讨论】:

    标签: python mongodb eval pymongo setattr


    【解决方案1】:

    你想要getattr,而不是setattr

    db = getattr(connection,dbname)
    

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

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

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

    【讨论】:

    • 是的,谢谢,这很有帮助。我不确定我是否知道数据库名称是正确的属性。当我输入dir(connection) 时,我没有看到它!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-03
    • 1970-01-01
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多