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

Jupyter Notebook运行Pymongo+Dash应用时卡在Loading状态求助

解决方案

核心问题定位:Mongo ObjectId字段序列化失败

你从Mongo读取的数据包含_id字段,类型为BSON的ObjectId类型,Pandas可以正常打印显示该类型,但Dash的DataTable将数据序列化为JSON传给前端时,无法处理ObjectId类型,导致页面一直卡在Loading状态。

修复步骤:

  1. 首先修改AAC.py中的read方法,支持Mongo查询的projection参数,方便剔除不可序列化的字段:
def read(self, data, projection=None):
    if data is not None:
        return self.database.animals.find(data, projection=projection)
    else:
        raise Exception("Nothing to read, because data parameter is empty")
  1. 修改.ipynb中读取数据的代码,查询时直接剔除_id字段:
df = pd.DataFrame.from_records(shelter.read({}, projection={"_id": 0}))

如果需要保留_id字段,可将其转为字符串类型:

df = pd.DataFrame.from_records(shelter.read({}))
df['_id'] = df['_id'].astype(str)

修复JupyterDash启动方式

直接在cell末尾写app不会触发Dash服务内嵌加载,需要调用run_server方法指定运行模式,将.ipynb末尾的app替换为:

app.run_server(mode='inline')

修复其他代码隐患

  1. 修正密码拼写错误:.ipynb中定义的password = "monogoadmin"拼写有误,应为mongoadmin。你当前的AnimalShelter类__init__方法硬编码了账号密码,不会用到传入的参数,建议要么删除硬编码使用传入的参数,要么保持两处账号密码一致。
  2. 修正AAC.py中update方法的错误:该方法中if find is not None:的find变量未定义,且update_one方法需要传入查询条件、更新内容两个参数,修改为:
def update(self, query, update_data):
    if query is not None and update_data is not None:
        return self.database.animals.update_one(query, {"$set": update_data})
    else:
        raise Exception("Query or update data parameter is empty")

可选排查项

如果修改后问题仍存在,可检查依赖版本兼容性:

  • 升级jupyter_plotly_dash、dash、dash-table到最新稳定版
  • 若使用JupyterLab,安装对应Plotly前端扩展

内容的提问来源于stack exchange,提问作者Britteny

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:18:03