Простой таблицы SQLite / Import вопрос
-
16-09-2020 - |
Вопрос
У меня простой вопрос 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 был набором уникальных целых чисел