Pergunta

Eu tenho uma simples pergunta SQL.Eu quero fazer uma coluna 3 banco de dados e eu tenho o seguinte código:

sqlite3 meshdb.db "create table t1 (t1key INTEGER PRIMARY KEY, prideID, pubmedID);"

Quando eu tentar importar um arquivo csv simples, com duas colunas (prideID e pubmedID), eu recebo um "esperado 3 colunas de dados, mas encontrou erro 2".Eu quero o t1key ser um número inteiro, e automaticamente contar como campos novos são adicionados.Tenho que colocar not NULL na frente de CHAVE PRIMÁRIA para este trabalho?

Foi útil?

Solução

.import não oferece suporte a reformulação de entrada (exceto desde a definição do separador).Você precisará importar o arquivo CSV para uma tabela temporária e a inserir na tabela real.Aqui está um exemplo de sessão:

$ 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; 

Você verá que o ID é contado para cima.Isto é porque uma coluna com o tipo INTEGER CHAVE PRIMÁRIA é tratada como um alias para o interno ROWID, que sempre é uma única, em ordem crescente de número.

Outras dicas

Em vez de insert utilização

create table newtable as select  * from  footmp;

É melhor e mais rápido.

Com .versão do sqlite (SQLite 3.7.15.2 2013-01-09) Eu tenho, você não tem que importar em uma tabela temporária em primeiro lugar.Tudo que eu fiz foi para certificar-se de definir um separador antes de iniciar a importação.Eu fiz especificar os valores de id para cada linha, então, minha primeira coluna no arquivo csv foi um conjunto único de números inteiros

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top