Bee*_*ePi 4 python mongodb pymongo pycharm pymongo-3.x
我刚刚将MongoDB和Pymongo升级到最新版本3.2.1,以便在调用update_one()后能够使用UpdateResult对象.但由于某种原因,返回的对象有一个包含AttributeError的字段.
看看我的Pycharm屏幕.你可以看到_UpdateResult__已经确认
'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'
Run Code Online (Sandbox Code Playgroud)
它导致我的问题,因为我试图捕获所有异常,每次我需要在我的代码中使用update_one()我得到这个异常.
这是我的代码片段:
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'
Run Code Online (Sandbox Code Playgroud)
幸运的是,我能够找到一个不会导致引发此异常的变通方法.而不是使用update_one(),我可以使用不推荐的函数update(),它只返回MongoDB的RAW结果,然后不是比较updateResult ['modified_count'],我只能比较updateResult ['nModified'].
但这绝对不是使用弃用函数的最佳实践...... :(
有什么想法吗?
对于那些可能遇到同样错误的人,我能够在这里得到答案:https://jira.mongodb.org/browse/PYTHON-1055
简而言之,因为UpdateResult不是python字典而且没有实现getitem.问题是尝试执行updateResult ['modified_count'] == 1,而我应该使用updateResult.modified_count == 1,因为UpdateResult.modified_count是一个属性.
| 归档时间: |
|
| 查看次数: |
5609 次 |
| 最近记录: |