Jupyter Notebook中SQLite语法错误求助:创建cast_1NF表失败
解决SQLite在Jupyter Notebook中创建表的语法错误问题
错误原因分析
你遇到的两个语法错误都是SQLite的固有规则导致的:
AUTOINCREMENT用法违规:SQLite里AUTOINCREMENT只能用于被定义为INTEGER PRIMARY KEY的单一列,不能作为复合主键的一部分。你原本把id和imdb_id设为复合主键,同时给id加AUTOINCREMENT,这直接违反了SQLite的语法规则。- 关键字冲突:
cast是SQLite的保留关键字,直接用作列名会触发语法错误,必须进行转义处理。
修正后的代码
如果需要自增的id作为主键,同时保留imdb_id字段,推荐使用下面的代码:
# create new table, cast1NF %%sql DROP TABLE IF EXISTS cast_1NF; CREATE TABLE cast_1NF ( id INTEGER PRIMARY KEY AUTOINCREMENT, imdb_id VARCHAR, "cast" VARCHAR -- 用双引号转义关键字 );
如果业务上必须设置id和imdb_id为复合主键,那不能给id用AUTOINCREMENT,可以依赖SQLite默认的ROWID实现自增,或者手动管理id值,代码如下:
# create new table, cast1NF %%sql DROP TABLE IF EXISTS cast_1NF; CREATE TABLE cast_1NF ( id INTEGER, imdb_id VARCHAR, "cast" VARCHAR, PRIMARY KEY (id, imdb_id) );
补充说明
- 之前提示
DROP TABLE报错,本质是因为后续的CREATE TABLE语法错误导致整个SQL块解析失败,修正CREATE TABLE后,DROP TABLE IF EXISTS就能正常运行。 - 如果你需要
imdb_id字段唯一,可以在表定义里添加UNIQUE(imdb_id)约束。
内容的提问来源于stack exchange,提问作者emekadavid
相关产品推荐
相关产品推荐

