Importar CSV para SQLite

Estou a tentar importar um ficheiro csv para uma tabela SQLite.

Exemplo csv:

1,2
5,6
2,7

comando de exemplo:

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
Nem sei porque encontraria quatro colunas com seis dados e duas colunas.

 127
Author: RousseauAlexandre, 2013-02-19

9 answers

O que também está sendo dito nos comentários, SQLite vê sua entrada como 1, 25, 62, 7. Também tive um problema com, e no meu caso foi resolvido mudando "separador" para ".mode csv". Para que pudesses tentar.

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

O primeiro comando cria os nomes das colunas da tabela. No entanto, se você quiser os nomes das colunas herdadas do arquivo csv, você pode simplesmente ignorar a primeira linha.

 168
Author: NumesSanguis, 2019-03-08 21:21:11
Eis como o fiz.
  • Make / Convert csv file to be sepperated by tabs (\t) AND not enclosed by any quotes (sqlite interpreta quotes literalmente - says old docs)
  • Introduza a shell sqlite da db à qual os dados devem ser adicionados

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

 31
Author: gyaani_guy, 2015-04-03 18:49:01

Estou a juntar informações de respostas anteriores aqui com a minha própria experiência. A mais fácil é adicionar os cabeçalhos de tabela separados por vírgulas diretamente ao seu ficheiro csv, seguido por uma nova linha, e depois TODOS os seus dados csv.

Se nunca mais voltar a fazer coisas sqlite (como eu), isto pode poupar-lhe uma pesquisa na web ou duas:

No shell Sqlite, indique:

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

Se não tiver o Sqlite instalado no seu Mac, execute

$ brew install sqlite3

Você pode precisar de fazer uma pesquisa na web para saber como instalar o Homebrew.

 28
Author: lukas_o, 2017-10-02 11:58:44

Como importar o ficheiro csv para sqlite3

  1. Criar base de dados

    sqlite3 NYC.db
    
  2. Define o modo & nome de mesa

    .mode csv tripdata
    
  3. Importar os dados do ficheiro csv para sqlite3

    .import yellow_tripdata_2017-01.csv tripdata
    
  4. Procurar tabelas

    .tables
    
  5. Encontra o esquema da tua mesa

    .schema tripdata
    
  6. Encontrar dados da tabela

    select * from tripdata limit 10;
    
  7. Conte o número de linhas no quadro

    select count (*) from tripdata;
    
 9
Author: sivamani, 2019-11-27 13:09:46
Antes .importar o comando, escrever".modo csv "
 8
Author: zeo, 2015-03-11 06:59:46

Com Termsql podes fazê-lo numa linha:

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

 4
Author: user3573558, 2020-01-13 17:54:15

Eu tive exatamente o mesmo problema (no OS X Maverics 10.9.1 com SQLite3 3.7.13, mas eu não acho que SQLite está relacionado com a causa). Eu tentei importar dados csv salvos do MS Excel 2011, que btw. usa ';' como separador de colunas. Eu descobri que o arquivo csv do Excel ainda usa o personagem newline do Mac OS 9 vezes, alterando-o para unix newline resolveu o problema. AFAIR BBEdit tem um comando para isso, bem como Texto Sublime 2.

 3
Author: adass, 2014-01-12 13:51:48

Siga os passos: -

  1. 1] Nome sqlite3 2] .modo csv nome de mesa 3] .importar o nome do ficheiro.CSV tablename
 1
Author: Lalit Bangad, 2020-04-22 11:34:09

Como alguns sites e outros artigos especificam, é simples ter um olhar para este. https://www.sqlitetutorial.net/sqlite-import-csv/

Não precisamos de especificar o separador para csv ficheiro, porque csv significa vírgula separado. Não há necessidade desta linha.

sqlite> create table cities(name, population);
sqlite> .mode csv
sqlite> .import c:/sqlite/city_no_header.csv cities
Isto vai funcionar perfeitamente.

PS: as minhas cidades.csv com cabeçalho.


name,population
Abilene,115930
Akron,217074
Albany,93994
Albuquerque,448607
Alexandria,128283
Allentown,106632
Amarillo,173627
Anaheim,328014
 0
Author: Dupinder Singh, 2020-04-22 20:02:16