如何在sqlite导入的csv中设置主键

use*_*882 1 sqlite

我将下表存储为 csv 文件:

project_number,project_name
1,project_1
2,project_2
3,project_3
Run Code Online (Sandbox Code Playgroud)

我想出了如何导入它并在 sqlite3 数据库中显示其架构,如下所示:

sqlite> .mode csv
sqlite> .import 
sqlite> .import test.csv test
sqlite> .schema test
CREATE TABLE test(
  "project_number" TEXT,
  "project_name" TEXT
);
Run Code Online (Sandbox Code Playgroud)

我现在想将该列设置project_number为我的主键,并将其设置为整数。我从之前的问题中了解到,通过更改原始表很难做到这一点,因此我尝试创建一个新表,并使用create tablecreate table asinsert into的组合进行填充select * from,如下所示

sqlite> create table test_2 (project_name text, project_number primary key);
sqlite> insert into test_2 (select project_name, project_number from test);
Error: near "select": syntax error
Run Code Online (Sandbox Code Playgroud)

但正如你所看到的,这导致了语法错误,我不明白为什么。如何为从 csv 导入的表设置主键?

Sha*_*awn 5

您也可以先创建表,然后再导入数据。假设Linux或Unix环境:

sqlite> create table test(project_number integer primary key, project_name text);
sqlite> .mode csv
sqlite> .import '| tail -n +2 test.csv' test
Run Code Online (Sandbox Code Playgroud)

将跳过文件中的第一个标题行并插入其余的。

  • 啊,`.import --skip 1 test.csv test` 可以代替 (2认同)