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

在Jupyter Notebook中使用%sql建表时出现KeyError: 'DEFAULT'

解决Jupyter %sql魔法命令触发KeyError: 'DEFAULT'问题

这个报错的核心原因是**ipython-sql(%sql魔法命令的依赖库)与新版本prettytable存在兼容性冲突**:新版本prettytable移除了DEFAULT样式常量,但ipython-sql的resultset.py代码仍在尝试调用这个已被删除的常量,从而触发KeyError。

解决方案

1. 降级prettytable到兼容版本

这是最直接的修复方式,将prettytable降级到3.8.0版本(该版本仍保留DEFAULT常量):
在Jupyter Notebook中执行:

!pip install prettytable==3.8.0

执行后重启Notebook内核即可生效。

2. 修改SqlMagic的样式配置

无需降级,直接指定prettytable当前支持的样式(如PLAIN_COLUMNS、GRID、MSWORD_FRIENDLY等):
在执行CREATE TABLE语句前,先运行配置命令:

%config SqlMagic.style='PLAIN_COLUMNS'

之后再执行SQL创建语句即可。

3. 临时修改库文件(不推荐)

若无法降级或修改配置,可手动调整ipython-sql的代码:

  • 找到文件路径:你的conda环境路径\Lib\site-packages\sql\run\resultset.py
  • 定位到第466行:_style = prettytable.__dict__[self._config.style.upper()]
  • 将self._config.style.upper()替换为存在的样式常量,比如'PLAIN_COLUMNS',修改后代码:
    _style = prettytable.__dict__['PLAIN_COLUMNS']
    

保存文件后重启Notebook内核即可。

额外提示

你的代码存在一个逻辑问题:

  • 第一行%sql sqlite:///dataProgramming.db连接的是本地文件数据库
  • 但创建表的%%sql sqlite://连接的是内存数据库,创建的表不会保存到dataProgramming.db文件中,关闭Notebook后数据会丢失。

建议统一连接字符串,将创建表的代码改为:

%%sql sqlite:///dataProgramming.db
CREATE TABLE
  users (
    FirstName VARCHAR(30) NOT NULL,
    LastName VARCHAR(30) NOT NULL,
    USERID INT NOT NULL UNIQUE,
    PRIMARY KEY (USERID)
  );

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:52:33