Как установить первичный ключ в CSV, импортированных sqlite - PullRequest
1 голос
/ 05 апреля 2020

У меня есть следующая таблица, сохраненная в виде файла 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 as, insert 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

Но, как вы можете видеть, это вызвало синтаксическую ошибку, и я не понимаю, почему. Как мне установить первичный ключ для таблиц, импортированных из csvs?

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Вы также можете сначала создать таблицу, а затем импортировать в нее данные. Предполагая, что среда 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

пропустит первую строку заголовка в файле и вставит остальные.

1 голос
/ 05 апреля 2020

Попробуйте:

insert into test_2 (project_number, project_name)
  select project_number, project_name from test;

Я думаю, insert into пример в https://dba.stackexchange.com/a/41108/26454 неверен: нужно перечислить столбцы после имени таблицы, ссылка .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...