运行Python代码遇AttributeError:Cursor对象无columns属性排查
解决AttributeError: 'Cursor' object has no attribute 'columns'错误
问题根源
你的错误直接来自FinalProject.py第48行的这段代码:
columns=[{"name": i, "id": i, "deletable": False, "selectable": True} for i in shelter.read({}).columns]
问题出在AnimalShelter_CRUD文件里的read方法——它返回的是MongoDB的Cursor对象,而不是你预期的Pandas DataFrame。Cursor是MongoDB用来迭代查询结果的对象,本身没有columns属性,自然会触发这个报错。
两种修复方案
方案1:修改CRUD类的read方法,直接返回DataFrame
在AnimalShelter_CRUD文件中,把read方法的返回结果转换成DataFrame:
import pandas as pd # 调整后的read方法 def read(self, query): cursor = self.collection.find(query) # 将Cursor转为DataFrame后返回 return pd.DataFrame(list(cursor))
修改后,主代码里直接调用shelter.read({}).columns就不会报错了。
方案2:在主代码中手动转换Cursor为DataFrame
如果不想改动CRUD类的逻辑,就在FinalProject.py里先把Cursor转成DataFrame再处理:
# 替换原来的第48行代码 data_cursor = shelter.read({}) # 将Cursor转为列表再转成DataFrame df = pd.DataFrame(list(data_cursor)) # 生成columns配置 columns=[{"name": i, "id": i, "deletable": False, "selectable": True} for i in df.columns]
额外注意
如果数据库查询结果为空,转换后的DataFrame会是空的,后续操作可以加个判断避免异常:
if not df.empty: columns=[{"name": i, "id": i, "deletable": False, "selectable": True} for i in df.columns] else: columns = [] # 或者其他适配空数据的处理逻辑
内容的提问来源于stack exchange,提问作者D Morris Watch Dog Tutorials
相关产品推荐
相关产品推荐

