首页 > 解决方案 > 如何在sqlite导入的csv中设置主键

问题描述

我将下表存储为 csv 文件:

project_number,project_name
1,project_1
2,project_2
3,project_3

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

sqlite> .mode csv
sqlite> .import 
sqlite> .import test.csv test
sqlite> .schema test
CREATE TABLE test(
  "project_number" TEXT,
  "project_name" TEXT
);

我现在想将该列设置project_number为主键并将其设置为整数。我从之前的问题中了解到,通过更改原始表很难做到这一点,因此我尝试创建一个新表并使用、和的组合填充create table,如此所示create table asinsert intoselect * 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

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

标签: sqlite

解决方案


您也可以先创建表,然后将数据导入其中。假设 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

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


推荐阅读