jupyter笔记本中sqlite的语法错误

acruukt9  于 2022-12-27  发布在  SQLite
关注(0)|答案(1)|浏览(201)

我正在使用Jupyter笔记本电脑来运行我的sqlite数据库。我是sqlite的新手,想从学校做一个测试。但是当我运行命令时,它给我语法错误,但我知道我得到了正确的命令。让我显示jupyter笔记本电脑中的单元格。第一个单元格。

%load_ext sql
# Load SQLite database
%sql sqlite:///movies.db

第二个细胞:

%%sql

SELECT *
FROM movies
LIMIT 2

到目前为止一切都运行良好,但当我调用第三个单元格时,它给出了语法错误:

# create new table, cast1NF
%%sql 
DROP TABLE IF EXISTS cast_1NF;
CREATE TABLE cast_1NF (
    id INTEGER AUTOINCREMENT, 
    imdb_id VARCHAR, 
    cast VARCHAR, 
    PRIMARY KEY (id, imdb_id)
);

Jupyter笔记本说DROP TABLE上有语法错误,然后当我删除那一行时,它说id INTEGER AUTOINCREMENT上有语法错误。这真的很麻烦。需要帮助。

w8f9ii69

w8f9ii691#

不能使用关键字AUTOINCREMENT,除非将列定义为INTEGER PRIMARY KEYINTEGER PRIMARY KEY本身只定义要自动增强的列)。
因此,要么将列id定义为主键,要么将imdb_id定义为唯一:

CREATE TABLE cast_1NF (
    id INTEGER PRIMARY KEY AUTOINCREMENT, 
    imdb_id TEXT UNIQUE, 
    cast TEXT
);

请参见demo
这样,就不需要将idimdb_id的组合定义为唯一的。
或者,如果实际上不需要id,可以将imdb_id定义为主键:

CREATE TABLE cast_1NF (
    imdb_id TEXT PRIMARY KEY, 
    cast TEXT
);

参见demo
没有VARCHARdata type in SQLite,所以我改成了TEXT

相关问题