Вопрос

У меня простой вопрос SQL.Я хочу сделать 3 столбца база данных, и у меня есть следующий код:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"
.

Когда я пытаюсь импортировать простой файл CSV с двумя столбцами (Prideid и PubMedid), я получаю «Ожидаемые 3 столбца данных, но нашли 2» ошибки.Я хочу, чтобы T1KEY был целым числом, и автоматически подсчитывается, так как новые поля добавлены.Должен ли я поставить не нуль перед первичным ключом к этому на работу?

Это было полезно?

Решение

.import не поддерживает изменение входа (кроме настройки сепаратора).Вам необходимо импортировать файл CSV во временную таблицу и вставить, что в реальную таблицу.Вот пример сеанса:

$ cat a.csv 
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp; 
sqlite> select * from foo; 
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp; 
.

Вы видите, что идентификатор рассчитывается.Это связано с тем, что столбец с типом Integer первичный ключ рассматривается как псевдоним для внутренней ROWID - что всегда является уникальным, восходящим числом.

Другие советы

вместо генеракодицетагкода используют

create table newtable as select  * from  footmp;
.

Это лучше и быстрее.

с .version of sqlite ( sqlite 3.7.15.2 2013-01-09 ) Я нахожусь, вам не нужно сначала импортировать в таблицу Temp.Все, что я сделал, это было, чтобы убедиться, что я установил сепаратор перед запуском импорта.Я указывал значения идентификатора для каждой строки, поэтому мой первый столбец в CSV был набором уникальных целых чисел

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top