Мне нужно выгрузить файл .sql или .csv в SQLite (я использую API SQLite3). Я только нашел документацию для импорта/загрузки таблиц, а не целых баз данных. Прямо сейчас, когда я печатаю:
sqlite3prompt> .import FILENAME TABLE
Я получаю синтаксическую ошибку, так как она ожидает таблицу, а не всю БД.
Для импорта из файла SQL используйте следующее:
sqlite> .read <filename>
Для импорта из файла CSV вам необходимо указать тип файла и таблицу назначения:
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
Попробуйте сделать это из команды, например:
cat dump.sql | sqlite3 database.db
Это, очевидно, будет работать только с операторами SQL в dump.sql. Я не уверен, как импортировать CSV.
.mode csv
были установлены для .mode csv
sqlite3 database.db < dump.sql
это SOOOO SLOW !!! Так что используйте cat dump.sql | sqlite3 database.db
Вместо cat dump.sql | sqlite3 database.db
! : D
Чтобы перейти от SCRATCH с SQLite DB к импортированию CSV в таблицу:
sqlite3 <your_db_file_name>
* Он будет создан как пустой файл.CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);
После создания таблицы и сопоставления столбцов с вашими данными из файла вы можете сделать это выше...
.mode csv <table_name>
.import <filename> <table_name>
Команда 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, я собираюсь изучить это.
Если вы счастливы использовать (python) script, тогда существует python script, который автоматизирует это: https://github.com/rgrp/csv2sqlite
Это позволит автоматически создать таблицу для вас, а также сделать некоторые основные угадывания типов и кавычки данных для вас (так, например, будет выработано что-то, это число и установите тип столбца "реальным" ).
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}]
Помните, что разделителем по умолчанию для SQLite является канал "|"
sqlite> .separator ";"
sqlite> .import path/filename.txt tablename
http://sqlite.awardspace.info/syntax/sqlitepg01.htm#sqlite010
если вы используете его в Windows, обязательно добавьте путь к db в "", а также используйте двойную слэш\в пути, чтобы убедиться, что Windows это понимает.
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
и т.д. Однако это не рекомендуется.
Проверьте условия. 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
Импортируйте свои csv или sql в sqlite с phpLiteAdmin, это отлично.