Я хочу импортировать 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 ответ
Перед вставкой укажите .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;
Перед созданием таблицы.
Похожие вопросы
Новые вопросы
sqlite
SQLite - это программная библиотека, которая реализует автономный, безсерверный, транзакционный механизм базы данных SQL с нулевой конфигурацией.