Как импортировать загрузить файл .sql или .csv в SQLite? - PullRequest
115 голосов
/ 25 июня 2009

Мне нужно выгрузить файл .sql или .csv в SQLite (я использую SQLite3 API). Я нашел только документацию для импорта / загрузки таблиц, а не целые базы данных. Прямо сейчас, когда я печатаю:

sqlite3prompt> .import FILENAME TABLE 

Я получаю синтаксическую ошибку, поскольку она ожидает таблицу, а не всю БД.

Ответы [ 11 ]

161 голосов
/ 26 июня 2009

Для импорта из файла SQL используйте следующее:

sqlite> .read <filename>

Для импорта из файла CSV вам необходимо указать тип файла и таблицу назначения:

sqlite> .mode csv <table>
sqlite> .import <filename> <table>
25 голосов
/ 25 июня 2009

Попробуйте сделать это из команды как:

cat dump.sql | sqlite3 database.db

Это, очевидно, будет работать только с операторами SQL в dump.sql. Я не уверен, как импортировать CSV.

22 голосов
/ 18 ноября 2009

Чтобы перейти от SCRATCH с базой данных SQLite к импорту CSV в таблицу:

  • Получить SQLite с сайта.
  • В командной строке запустите sqlite3 <your_db_file_name> * Он будет создан как пустой файл.
  • Создайте новую таблицу в вашей новой базе данных. Таблица должна соответствовать вашим CSV-полям для импорта.
  • Вы делаете это командой SQL: CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);

После создания таблицы и сопоставления столбцов с вашими данными из файла вы можете выполнить описанное выше ...

.mode csv <table_name>
.import <filename> <table_name>
11 голосов
/ 23 февраля 2010

Команда sqlite3 .import не будет работать для обычных данных CSV, поскольку она обрабатывает любую запятую как разделитель даже в строке в кавычках.

Это включает попытку повторно импортировать CSV-файл, созданный оболочкой:

Create table T (F1 integer, F2 varchar);
Insert into T values (1, 'Hey!');
Insert into T values (2, 'Hey, You!');

.mode csv
.output test.csv
select * from T;

Contents of test.csv:
1,Hey!
2,"Hey, You!"

delete from T;

.import test.csv T
Error: test.csv line 2: expected 2 columns of data but found 3

Кажется, мы должны преобразовать CSV в список операторов вставки, иначе возможно будет работать другой разделитель.

В SuperUser я увидел предложение использовать LogParser для работы с CSV-файлами, я собираюсь разобраться с этим.

10 голосов
/ 07 апреля 2013

Если вы счастливы использовать скрипт (python), существует скрипт python, который автоматизирует это по адресу: https://github.com/rgrp/csv2sqlite

Это автоматически создаст таблицу для вас, а также проведет для вас базовое угадывание типов и приведение данных (например, он сработает, если что-то будет числом, и установит тип столбца в «real»).

7 голосов
/ 16 апреля 2014

Помните, что разделителем по умолчанию для SQLite является канал "|"

sqlite> .separator ";"

sqlite> .import path/filename.txt tablename 

http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite010

1 голос
/ 18 августа 2016

Если вы используете его в Windows, обязательно добавьте путь к БД в "", а также используйте двойную косую черту \ в пути, чтобы убедиться, что Windows его понимает.

1 голос
/ 24 января 2015

SQLite чрезвычайно гибок, поскольку он также допускает специфические для SQLite точечные команды в синтаксисе SQL (хотя они интерпретируются CLI.) Это означает, что вы можете делать такие вещи.

Создайте таблицу sms следующим образом:

# sqlite3 mycool.db '.schema sms'
CREATE TABLE sms (_id integer primary key autoincrement, Address VARCHAR, Display VARCHAR, Class VARCHAR, ServiceCtr VARCHAR, Message VARCHAR, Timestamp TIMESTAMP NOT NULL DEFAULT current_timestamp);

Затем два файла:

# echo "1,ADREZZ,DizzPlay,CLAZZ,SMSC,DaTestMessage,2015-01-24 21:00:00">test.csv

# cat test.sql
.mode csv
.header on
.import test.csv sms

Чтобы проверить импорт файла CSV с использованием файла SQL, выполните:

# sqlite3 -csv -header mycool.db '.read test.sql'

В заключение, это означает, что вы можете использовать оператор .import в SQLite SQL, так же, как вы можете использовать любой другой RDB, например, MySQL с LOAD DATA INFILE и т. Д. Однако это не рекомендуется.

1 голос
/ 22 ноября 2014

Ознакомьтесь с условиями. https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home

Преобразует текст в SQL в командной строке. (CSV это просто текст)

Пример:

cat textfile | termsql -o sqlite.db

По умолчанию в качестве разделителя используется пробел, поэтому, чтобы он работал с CSV, использующим запятые, вы должны сделать это так:

cat textfile | termsql -d ',' -o sqlite.db

в качестве альтернативы вы можете сделать это:

termsql -i textfile -d ',' -o sqlite.db

По умолчанию он генерирует имена столбцов "COL0", "COL1", если вы хотите использовать первую строку для имен столбцов, вы делаете это:

termsql -i textfile -d ',' -1 -o sqlite.db

Если вы хотите установить пользовательские имена столбцов, вы делаете это:

termsql -i textfile -d ',' -c 'id,name,age,color' -o sqlite.db
0 голосов
/ 24 апреля 2018

Вот как вы можете вставить в столбец идентификации:

CREATE TABLE my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, name COLLATE NOCASE);
CREATE TABLE temp_table (name COLLATE NOCASE);

.import predefined/myfile.txt temp_table 
insert into my_table (name) select name from temp_table;

myfile.txt - это файл в C: \ code \ db \ предопределенный \

data.db находится в C: \ code \ db \

myfile.txt содержит строки, разделенные символом новой строки.

Если вы хотите добавить больше столбцов, их легче разделить с помощью символа канала (по умолчанию).

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