PyMongo报错:'InsertManyResult'对象无'inserted_count'属性求助
问题解决:PyMongo InsertManyResult 不存在 inserted_count 属性
问题原因
PyMongo 3.4.0中,insert_many返回的InsertManyResult类没有inserted_count属性——这个属性属于update_many这类更新操作返回的UpdateResult对象。插入操作的结果对象属性规则如下:
insert_many返回的结果对象仅包含inserted_ids属性,是一个存储所有插入文档ID的列表insert_one返回的InsertOneResult对象仅包含inserted_id属性,对应单个插入文档的ID
你的代码错误地对插入结果调用了inserted_count,因此触发AttributeError。
修复方案
1. 修正插入数量的获取逻辑
替换原有的数量获取代码,根据插入类型计算数量:
print(x) # 区分批量/单条插入的数量获取方式 if hasattr(x, 'inserted_ids'): inserted_count = len(x.inserted_ids) else: inserted_count = 1 if hasattr(x, 'inserted_id') else 0 print(inserted_count, "documents inserted.") number_of_insert_data = inserted_count
2. 补充错误判断逻辑
你的ins_data函数在出错时会返回字符串(如"error in ins_data function"),后续直接调用属性会再次报错,需要先校验返回值类型:
x = ins_data(one_or_many_bool, insert_values_json ) # 先判断是否插入成功 if isinstance(x, str): print("插入失败:", x) exit() # 再处理插入数量 inserted_count = len(x.inserted_ids) if one_or_many_bool else 1 print(inserted_count, "documents inserted.") number_of_insert_data = inserted_count
完整修复后的核心代码片段
x = ins_data(one_or_many_bool, insert_values_json ) print(x) if isinstance(x, str): print("插入错误:", x) else: inserted_count = len(x.inserted_ids) if one_or_many_bool else 1 print(inserted_count, "documents inserted.") number_of_insert_data = inserted_count # 后续获取插入数据的逻辑保持不变 modified_data_list = [] for modified_data in mycol.find().sort("_id", -1).limit(number_of_insert_data): modified_data_list.append(modified_data)
额外提示
PyMongo的插入结果类与更新结果类设计逻辑不同,插入操作的文档数量只能通过inserted_ids的长度(批量场景)或直接设为1(单条场景)来获取,这是官方文档明确的规范。
内容的提问来源于stack exchange,提问作者j ton
相关产品推荐
相关产品推荐

