간단한 SQL Lite 테이블/가져오기 질문
-
16-09-2020 - |
문제
간단한 SQL 질문이 있습니다.3열 데이터베이스를 만들고 싶은데 다음 코드가 있습니다.
sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"
두 개의 열(prideID 및 pubmedID)이 있는 간단한 csv 파일을 가져오려고 하면 "3개 데이터 열이 예상되지만 2개 발견" 오류가 발생합니다.t1key가 정수가 되기를 원하며 새 필드가 추가되면 자동으로 계산됩니다.이것이 작동하려면 PRIMARY KEY 앞에 NOT NULL을 넣어야 합니까?
해결책
.import
는 입력의 재구성을 지원하지 않습니다 (구분 기호 설정을 제외하고).CSV 파일을 임시 테이블로 가져 와서 실제 테이블에 삽입해야합니다.예제 세션이 있습니다.
$ cat a.csv
1,2
3,4
5,6
$ sqlite3 a.db
SQLite version 3.6.23.1
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> create table foo(id integer primary key,x,y);
sqlite> create temp table footmp(x,y);
sqlite> .separator ,
sqlite> .import a.csv footmp
sqlite> select * from footmp;
1,2
3,4
5,6
sqlite> insert into foo(x,y) select * from footmp;
sqlite> select * from foo;
1,1,2
2,3,4
3,5,6
sqlite> drop table footmp;
.
ID가 계산 된 것을 알 수 있습니다.이것은 정수 기본 키가있는 열이 항상 내부 ROWID의 별칭으로 취급되기 때문에 항상 고유 한 오름차순 숫자입니다.
다른 팁
대신에 insert
사용
create table newtable as select * from footmp;
더 좋고 빠릅니다.
SQLite ( sqlite 3.7.15.2 2013-01-09 )의 변화를 가져 와서 켜져 있으면 먼저 Temp 테이블로 가져올 필요가 없습니다.내가 한 모든 일은 가져 오기를 시작하기 전에 세퍼레이터를 설정했는지 확인하는 것이 었습니다.각 행의 ID 값을 지정 했으므로 CSV의 첫 번째 열은 고유 한 정수 세트
였습니다.제휴하지 않습니다 StackOverflow