You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 15:52:11