Как импортировать загрузить файл .sql или .csv в SQLite?

105

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

sqlite3prompt> .import FILENAME TABLE 

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

Теги:
database
import

10 ответов

148

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

sqlite> .read <filename>

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

sqlite> .mode csv <table>
sqlite> .import <filename> <table>
  • 2
    Это правильный ответ, но иногда он задыхается от фанки / испорченных файлов CSV.
  • 0
    Выдает ошибку «не могу открыть db.sql», когда я использую .read commond.
Показать ещё 2 комментария
25

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

cat dump.sql | sqlite3 database.db

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

  • 0
    Я думаю, что это будет работать точно так же, но пользователь должен убедиться, что настройки .mode csv были установлены для .mode csv
  • 0
    Просто хочу сделать комментарий здесь, на самом деле это 100% мертвых, sqlite3 database.db < dump.sql это SOOOO SLOW !!! Так что используйте cat dump.sql | sqlite3 database.db Вместо cat dump.sql | sqlite3 database.db ! : D
Показать ещё 1 комментарий
21

Чтобы перейти от SCRATCH с SQLite DB к импортированию 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>
  • 1
    Чувак, это не отвечает на вопрос. Это связано, но не ответ на ...
  • 0
    @jacob просто к твоему сведению, этому ответу почти 4 года, и человека, который его опубликовал, не было здесь более трех лет.
Показать ещё 1 комментарий
11

Команда 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 в список операторов Insert, или, возможно, будет работать другой разделитель.

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

  • 0
    blairxy: Ошибка, которую вы получаете, связана с запятой в «Эй, ты!». При загрузке 2-й строки Sqlite видит 3 столбца, а после удаления 2-й запятой вы можете загрузить ее без ошибок.
10

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

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

  • 0
    Почти работает - строка заголовка импортирует ОК. Однако тогда я получаю sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings # csv2sqlite.py {csv-file-path} {sqlite-db-path} [{table-name}]
  • 0
    Хм, я никогда не видел эту ошибку, используя это. Вы использовали не-Unicode или не-UTF8 данные? В этом случае вам может понадобиться настроить скрипт, чтобы открыть файл CSV, используя определенную кодировку, которую он использует.
Показать ещё 3 комментария
6

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

sqlite> .separator ";"

sqlite> .import path/filename.txt tablename 

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

1

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

1

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

Проверьте условия. https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home

Он преобразует текст в SQL в командной строке. (CSV - только текст)

Пример:

cat textfile | termsql -o sqlite.db

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

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
-2

Импортируйте свои csv или sql в sqlite с phpLiteAdmin, это отлично.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню