답변:
SQL 파일에서 가져 오려면 다음을 사용하십시오.
sqlite> .read <filename>
CSV 파일에서 가져 오려면 파일 유형과 대상 테이블을 지정해야합니다.
sqlite> .mode csv <table>
sqlite> .import <filename> <table>
다음과 같은 명령에서 시도하십시오.
cat dump.sql | sqlite3 database.db
이것은 분명히 dump.sql의 SQL 문에서만 작동합니다. CSV를 가져 오는 방법을 잘 모르겠습니다.
.mode csv
sqlite3 database.db < dump.sql
SOOOO SLOW !!! 따라서 cat dump.sql | sqlite3 database.db
대신 사용하십시오! : D
SQLite DB가있는 SCRATCH에서 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) 스크립트를 사용하는 것이 좋으면 이것을 자동화하는 python 스크립트가 있습니다 : 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
SQLite는 SQL 구문에서 SQLite 특정 도트 명령 을 허용하기 때문에 매우 유연 합니다 (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
SQL 파일을 사용하여 CSV 파일 가져 오기를 테스트하려면 다음을 실행하십시오.
# sqlite3 -csv -header mycool.db '.read test.sql'
결론적으로 이것은 .import
MySQL과 같은 다른 RDB에서 할 수있는 것처럼 SQLite SQL 에서 문을 사용할 수 있음을 의미합니다 LOAD DATA INFILE
. 그러나 이것은 권장되지 않습니다.
termsql을 확인하십시오. 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
다음은 ID 열에 삽입하는 방법입니다.
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 \ predefined \에있는 파일입니다.
data.db는 C : \ code \ db \에 있습니다.
myfile.txt는 개행 문자로 구분 된 문자열을 포함합니다.
더 많은 열을 추가하려는 경우 기본값 인 파이프 문자를 사용하여 열을 분리하는 것이 더 쉽습니다.
phpLiteAdmin 을 사용하여 csv 또는 sql을 sqlite로 가져 오면 훌륭합니다.