【问题标题】:Pymongo's update_one() returns UpdateResult with AttributeErrorPymongo 的 update_one() 返回带有 AttributeError 的 UpdateResult
【发布时间】:2016-05-20 19:14:53
【问题描述】:

我刚刚将我的 MongoDB 和 Pymongo 升级到最新版本 3.2.1,以便在调用 update_one() 后能够使用 UpdateResult 对象。 但由于某种原因,返回的对象有一个包含 AttributeError 的字段。

看看我的Pycharm screen。你可以看到 _UpdateResult__acknowledged

'Traceback (most recent call last):
  File "/opt/pycharm-community-5.0.4/helpers/pydev/pydevd_resolver.py", line 191, in _getPyDictionary
    attr = getattr(var, n)
AttributeError: _UpdateResult__acknowledged'

这给我带来了一个问题,因为我试图捕获所有异常,并且每次我需要在我的代码中使用 update_one() 时都会得到这个异常。

这是我的代码的 sn-p:

QUERY = {id: '1234'}
try:
    record = mongoCollection.find_one(QUERY)
    if record is None:
        print 'Add new Record'
    else:
        updateResult = mongoCollection.update_one(
            QUERY,
            {'$addToSet': {'info': getInfo()}}
        )

        if updateResult['modified_count'] == 1:
            mongoCollection.update_one(
                QUERY,
                {'$inc': {'infoCount': 1}}
            )
        print 'Record exists, updating if needed'
except:
    print 'Failed to add/update'

幸运的是,我能够找到一种不会导致引发此异常的解决方法。 除了使用 update_one(),我可以使用已弃用的函数 update(),它只返回 MongoDB 的 RAW 结果,而不是比较 updateResult['modified_count '],我只能比较 updateResult['nModified']。

但这绝对不是使用已弃用函数的最佳实践... :(

有什么想法吗?

【问题讨论】:

    标签: python mongodb pycharm pymongo pymongo-3.x


    【解决方案1】:

    对于可能遇到相同错误的人,我可以在这里得到答案:https://jira.mongodb.org/browse/PYTHON-1055

    简而言之,因为 UpdateResult 不是 python 字典并且没有实现__getitem__。问题是试图做的

     updateResult['modified_count'] == 1
    

    我应该使用

     updateResult.modified_count == 1
    

    因为UpdateResult.modified_count 是一个属性。

    【讨论】:

    • 您应该将此标记为已回答。您为问题提供了一个很好的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-26
    • 2020-09-12
    • 2019-08-20
    • 1970-01-01
    • 2023-02-26
    • 2019-01-30
    • 2017-04-27
    相关资源
    最近更新 更多