문제

간단한 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의 첫 번째 열은 고유 한 정수 세트

였습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top