SQLite3: Как импортировать CSV и изменить типы столбцов? - PullRequest
0 голосов
/ 02 октября 2019

Я хочу импортировать CSV с помощью Командная строка оболочки для SQLite в Linux (SQLite версии 3.29.0) и установить соответствующие типы данных.

sqlite> .open outputSQLDB.db
sqlite> .import input.csv tmpTable

Но сейчасимпортированная таблица испорчена:

sqlite> .schema
CREATE TABLE DX(
  "id,field1,field2" TEXT
);

Почему поля не разделены?

В конце я просто делаю:

sqlite> CREATE TABLE myTbl (
   ...>                    id INTEGER,
   ...>                    field1 TEXT,
   ...>                    field2 INTEGER
   ...>                   );
CREATE INDEX id_index on myTbl (id);
sqlite> DROP TABLE IF EXISTS tmpTable;

1 Ответ

0 голосов
/ 02 октября 2019

Укажите .mode csv перед вставкой. Также убедитесь, что временная таблица не существует, в противном случае SQLite интерпретирует первую строку CSV как данные.

Перед удалением временной таблицы перенесите строки в новую таблицу с помощью команды INSERT INTO. В противном случае они будут потеряны.

Вы получите последовательность команд:

.open outputSQLDB.db
DROP TABLE IF EXISTS tmpTable;
.mode csv
.import input.csv tmpTable
CREATE TABLE myTbl (
    id INTEGER,
    field1 TEXT,
    field2 INTEGER
);
CREATE INDEX id_index on myTbl (id);
INSERT INTO myTbl (id, field1, field2)
SELECT id, field1, field2
FROM tmpTable;
DROP TABLE IF EXISTS tmpTable;

Я бы также использовал

CREATE TABLE IF NOT EXISTS myTbl (
   ...
);

или

DROP TABLE IF EXISTS myTbl;

перед созданием таблицы.

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