[sqlite] CSV를 SQLite로 가져 오기

csv 파일을 SQLite 테이블로 가져 오려고합니다.

csv 예 :

1,2
5,6
2,7

예제 명령 :

sqlite> create table foo(a, b);
sqlite> .separator ,
sqlite> .import test.csv foo
Error: test.csv line 1: expected 2 columns of data but found 4

6 개의 데이터와 2 개의 열이있는 4 개의 열을 찾는 이유도 모르겠습니다.



답변

주석에서도 언급 된 내용은 SQLite는 귀하의 입력을 1, 25, 62, 7로 간주합니다. 나도에서 문제가 발생했으며 제 경우에는 “separator”를 “.mode csv”로 변경하여 해결했습니다. 따라서 시도해 볼 수 있습니다.

sqlite> create table foo(a, b);
sqlite> .mode csv
sqlite> .import test.csv foo

첫 번째 명령은 테이블의 열 이름을 만듭니다. 그러나 csv 파일에서 상속 된 열 이름을 원하는 경우 첫 번째 줄을 무시할 수 있습니다.


답변

내가 한 방법은 다음과 같습니다.

  • csv 파일을 탭 (\ t)으로 구분하고 따옴표로 묶지 않도록 만들기 / 변환합니다 (sqlite는 따옴표를 문자 그대로 해석-이전 문서를 말합니다)
  • 데이터를 추가해야하는 db의 sqlite 쉘을 입력하십시오.

    sqlite> .separator "\t" ---IMPORTANT! should be in double quotes
    sqlite> .import afile.csv tablename-to-import-to


답변

여기에 이전 답변의 정보를 내 경험과 병합하고 있습니다. 가장 쉬운 방법은 쉼표로 구분 된 표 헤더를 csv 파일에 직접 추가 한 다음 새 줄을 추가 한 다음 모든 csv 데이터를 추가하는 것입니다.

(나와 같은) sqlite 작업을 다시하지 않으면 웹 검색을 한두 번 절약 할 수 있습니다.

Sqlite 셸에서 다음을 입력합니다.

$ sqlite3 yourfile.sqlite
sqlite>  .mode csv
sqlite>  .import test.csv yourtable
sqlite>  .exit

Mac에 Sqlite가 설치되어 있지 않은 경우 다음을 실행하십시오.

$ brew install sqlite3

Homebrew를 설치하는 방법에 대해 웹 검색을 한 번 수행해야 할 수도 있습니다.


답변

.import 명령 앞에 “.mode csv”를 입력합니다.


답변

csv 파일을 sqlite3로 가져 오는 방법

  1. 데이터베이스 생성

    sqlite3 NYC.db
  2. 모드 및 테이블 이름 설정

    .mode csv tripdata
  3. csv 파일 데이터를 sqlite3로 가져 오기

    .import yellow_tripdata_2017-01.csv tripdata
  4. 테이블 찾기

    .tables
  5. 테이블 스키마 찾기

    .schema tripdata
  6. 테이블 데이터 찾기

    select * from tripdata limit 10;
  7. 테이블의 행 수를 계산

    select count (*) from tripdata;

답변

Termsql 을 사용하면 한 줄로 수행 할 수 있습니다.

termsql -i mycsvfile.CSV -d ',' -c 'a,b' -t 'foo' -o mynewdatabase.db


답변

나는 똑같은 문제가있었습니다 (SQLite3 3.7.13이있는 OS X Maverics 10.9.1에서 SQLite가 원인과 관련이 있다고 생각하지 않습니다). MS Excel 2011에서 저장된 csv 데이터를 가져 오려고했습니다. ';'열 구분자로 사용합니다 . Excel의 csv 파일이 여전히 Mac OS의 개행 문자를 9 번 사용한다는 것을 알게되었고,이를 유닉스 개행으로 변경하면 문제가 해결되었습니다. AFAIR BBEdit에는 Sublime Text 2뿐만 아니라 이에 대한 명령이 있습니다.