Como importar carregar um arquivo .sql ou .csv para o SQLite?
Preciso despejar um arquivo .sql ou .csv no SQLite (estou usando a API SQLite3). Só encontrei documentação para importar / carregar tabelas, não bancos de dados inteiros. Agora, quando digito:
Recebo um erro de sintaxe, pois ele está esperando uma tabela e não um banco de dados inteiro.
— happythenewsad
Para importar de um arquivo SQL, use o seguinte:
Para importar de um arquivo CSV, você precisará especificar o tipo de arquivo e a tabela de destino:
— Jay Igor
Esta é a resposta certa, mas às vezes engasga com arquivos CSV estranhos / corrompidos.
Ele está apresentando o erro "não é possível abrir db.sql", quando estou usando .read commond.
como ele obtém os nomes das colunas, se eles não estão presentes no arquivo csv?
— sumanth232
@ krishna222, de acordo com a documentação , se a tabela não existir, a primeira linha do CSV será usada como nome das colunas; se a tabela existir, todas as linhas serão tratadas como dados.
— alttag 01 de
Tente fazer a partir do comando como:
Obviamente, isso só funcionará com instruções SQL em dump.sql. Não tenho certeza de como importar um CSV.
Acho que funcionaria da mesma forma, mas o usuário teria que se certificar de que as configurações de sqlite3 foram definidas para.mode csv
Só quero fazer um comentário aqui, isso está realmente 100% certo, sqlite3 database.db < dump.sqlé SOOOO LENTO !!! Portanto, use cat dump.sql | sqlite3 database.db! : D
@JavierBuzzi: Desculpe, mas isso não faz sentido. Esses dois métodos são equivalentes. Você deve ter tido algo mais acontecendo quando tentou um método ou outro. Em condições de teste estáveis, garanto que não haverá diferença de velocidade.
— IcarusNM de
Para ir de SCRATCH com SQLite DB para importar o CSV para uma tabela:
Obtenha o SQLite no site.
Em um prompt de comando, execute sqlite3 <your_db_file_name>* Ele será criado como um arquivo vazio.
Faça uma nova tabela em seu novo banco de dados. A tabela deve corresponder aos seus campos CSV para importação.
Você faz isso pelo comando SQL: CREATE TABLE <table_Name> (<field_name1> <Type>, <field_name2> <type>);
Depois de criar a tabela e as colunas corresponderem aos dados do arquivo, você pode fazer o acima ...
— Jake Wyman
@jacob só para constar, esta resposta tem quase 4 anos e a pessoa que a postou não está aqui há mais de três anos.
Você salvou minhas semanas. Terminei meu trabalho em 3 segundos. Converti um arquivo CSV de 120 MB para .db em meros 5 segundos.
O comando sqlite3 .import não funcionará para dados csv comuns porque trata qualquer vírgula como um delimitador, mesmo em uma string entre aspas.
Isso inclui tentar reimportar um arquivo csv que foi criado pelo shell:
Parece que devemos transformar o csv em uma lista de instruções Insert, ou talvez um delimitador diferente funcione.
No SuperUser, vi uma sugestão para usar o LogParser para lidar com arquivos csv, vou dar uma olhada nisso.
— blairxy
blairxy: O erro que você está recebendo é devido à vírgula em "Ei, você!". Enquanto carrega a 2ª linha, o Sqlite vê 3 colunas e ao remover a 2ª vírgula você pode carregá-lo sem erros.
Se você estiver satisfeito em usar um script (python), então existe um script python que o automatiza em: https://github.com/rgrp/csv2sqlite
Isso criará automaticamente a tabela para você, bem como fará algumas adivinhações básicas de tipo e conversão de dados para você (então, por exemplo, ele descobrirá que algo é um número e definirá o tipo de coluna como "real").
Quase funciona - a linha do cabeçalho é importada OK. No entanto, eu obtenho sqlite3.ProgrammingError: You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings# csv2sqlite.py {caminho do arquivo csv} {caminho do banco de dados sqlite} [{nome da tabela}]
Hmmm, nunca vi esse erro ao usar isso. Você estava usando dados não unicode ou não utf8? Nesse caso, pode ser necessário ajustar o script para abrir o arquivo CSV usando a codificação específica que está usando.
Mais ou menos na mesma época, escrevi um script ruby ​​que faz a mesma coisa !! Ele deve até funcionar em vários arquivos CSV ao mesmo tempo, adivinhando o nome da tabela a partir do nome do arquivo. github.com/dergachev/csv2sqlite
Precisamos ler sys.stdin, pois precisamos converter um arquivo csv.gz de 60 GB. Ou haveria uma chance de obter suporte de leitura gzip para csv2sqlite? Obrigado!
@markusN abre um problema no rastreador github. Geralmente, eu me preocuparia com um arquivo CSV de 100 GB + em sqlite (você já pensou sobre um RDB "adequado", por exemplo, postgres ou mesmo bigquery, redshift etc
Lembre-se de que o delimitador padrão para SQLite é a barra vertical "|"
O SQLite é extremamente flexível, pois também permite os comandos de pontos específicos do SQLite na sintaxe SQL (embora sejam interpretados pela CLI). Isso significa que você pode fazer coisas assim.
Crie uma smstabela como esta:
Em seguida, dois arquivos:
Para testar a importação do arquivo CSV usando o arquivo SQL, execute:
Em conclusão, isso significa que você pode usar a .importinstrução no SQLite SQL, da mesma forma que você pode fazer em qualquer outro RDB, como o MySQL com LOAD DATA INFILEetc. No entanto, isso não é recomendado.
Confira os termosql. https://gitorious.org/termsql https://gitorious.org/termsql/pages/Home
Ele converte texto em SQL na linha de comando. (CSV é apenas texto)
Por padrão, o delimitador é um espaço em branco, então para fazê-lo funcionar com CSV que usa vírgulas, você faria assim:
Por padrão, ele irá gerar os nomes das colunas "COL0", "COL1", se você quiser usar a primeira linha para os nomes das colunas, faça o seguinte:
Se você deseja definir nomes de coluna personalizados, faça o seguinte:
— user3573558
se estiver usando no windows, certifique-se de adicionar o caminho para o banco de dados em "" e também de usar barra dupla \ no caminho para ter certeza de que o Windows o entende.
— MahD
É assim que você pode inserir em uma coluna de identidade:
myfile.txt é um arquivo em C: \ code \ db \ predefined \
data.db está em C: \ code \ db \
myfile.txt contém strings separadas por caractere de nova linha.
Se você quiser adicionar mais colunas, é mais fácil separá-las usando a barra vertical, que é o padrão.