Qual é a maneira melhor / mais rápida de fazer upload de um arquivo csv em uma tabela mysql? Eu gostaria que a primeira linha de dados fosse usada como os nomes das colunas.
Encontrei isto:
Como importar arquivo CSV para a tabela MySQL
Mas a única resposta era usar uma GUI e não shell?
Respostas:
Em vez de escrever um script para obter informações de um arquivo CSV, você pode vincular MYSQL diretamente a ele e fazer upload das informações usando a seguinte sintaxe SQL.
Para importar um arquivo Excel para o MySQL, primeiro exporte-o como um arquivo CSV. Remova os cabeçalhos CSV do arquivo CSV gerado junto com os dados vazios que o Excel pode ter colocado no final do arquivo CSV.
Você pode então importá-lo para uma tabela MySQL executando:
conforme lido em: Importar arquivo CSV diretamente para o MySQL
EDITAR
Para o seu caso, você precisará escrever um interpretador primeiro, para localizar a primeira linha e atribuí-los como nomes de coluna.
EDIT-2
Da documentação do MySQL sobre
LOAD DATA
sintaxe :Portanto, você pode usar a seguinte declaração:
fonte
IGNORE 1 LINES
à consultaAqui está um script simples de linha de comando PHP que fará o que você precisa:
Ele criará uma tabela com base na primeira linha e importará as linhas restantes para ela. Esta é a sintaxe da linha de comando:
fonte
fields terminated by ','
... funciona até mesmo com CSVs com aspas duplas.ENCLOSED BY '\"'
... também, muitas pessoas vão precisarLINES TERMINATED BY '\r\n'
se usar um CSV do Windows. E, finalmente, escapar os nomes dos campos com crases é aconselhável, caso haja espaços:$columns .= "`$column` varchar(250)";
se você tiver a capacidade de instalar o phpadmin, há uma seção de importação onde você pode importar arquivos csv para o seu banco de dados, há até uma caixa de seleção para definir o cabeçalho para a primeira linha do arquivo que contém os nomes das colunas da tabela (se estiver desmarcada, a a primeira linha se tornará parte dos dados
fonte
Primeiro crie uma tabela no banco de dados com o mesmo número de colunas que estão no arquivo csv.
Em seguida, use a seguinte consulta
fonte
Para carregar dados de um arquivo de texto ou arquivo csv, o comando é
No comando acima, no meu caso, há apenas uma coluna a ser carregada, portanto não há "encerrado por" e "encerrado por", portanto, mantive-o vazio, caso contrário o programador pode inserir o caractere de separação. por exemplo. , (vírgula) ou "ou; ou qualquer coisa.
** para pessoas que usam o mysql versão 5 e superior **
Antes de carregar o arquivo no mysql deve garantir que abaixo da linha de reboque são adicionados na lateral
etc/mysql/my.cnf
editar o comando my.cnf é
sudo vi /etc/mysql/my.cnf
fonte
Se você iniciar o mysql como "mysql -u -p --local-infile", ele funcionará bem
fonte
Eu escrevi alguns códigos para fazer isso, vou colocar alguns trechos:
Em seguida, obtenha os cabeçalhos CSV para que possa dizer ao mysql como importar (nota: certifique-se de que as colunas do mysql correspondem exatamente às colunas csv):
Em seguida, envie sua consulta para o servidor mysql:
fonte
Lutei com isso por algum tempo. O problema não está em como carregar os dados, mas em como construir a tabela para armazená-los. Você deve gerar uma instrução DDL para construir a tabela antes de importar os dados.
Particularmente difícil se a tabela tiver um grande número de colunas.
Aqui está um script Python que (quase) faz o trabalho:
O problema que falta resolver é que o nome do campo final e a declaração do tipo de dados terminam com uma vírgula, e o analisador mySQL não tolera isso.
Claro que também tem o problema de usar o tipo de dados TEXT para todos os campos. Se a tabela tiver várias centenas de colunas, VARCHAR (64) tornará a tabela muito grande.
Isso também parece quebrar na contagem máxima de colunas para mySQL. É quando é hora de mudar para Hive ou HBase, se você puder.
fonte
Veja como fiz em Python usando csv e o conector MySQL :
Pontos chave
'rb'
binárioskipinitialspace
opção.255
não for grande o suficiente, você obterá erros em INSERT e terá que começar de novo.ALTER TABLE t MODIFY `Amount` DECIMAL(11,2);
ALTER TABLE t ADD `id` INT PRIMARY KEY AUTO_INCREMENT;
fonte
Importar arquivos CSV para a tabela mysql
visitas: http://www.webslessons.com/2014/02/import-csv-files-using-php-and-mysql.html
fonte
Como outros mencionaram, o infile local de dados de carga funciona muito bem. Eu tentei o script php que Hawkee postou, mas não funcionou para mim. Em vez de depurar, aqui está o que fiz:
1) copie / cole a linha de cabeçalho do arquivo CSV em um arquivo txt e edite com emacs. adicione uma vírgula e um CR entre cada campo para colocar cada um em sua própria linha.
2) Salve esse arquivo como FieldList.txt
3) edite o arquivo para incluir defns para cada campo (a maioria era varchar, mas alguns eram int (x). Adicione criar tabela tablename (no início do arquivo e) ao fim do arquivo. Salve-o como CreateTable.sql
4) inicie o cliente mysql com a entrada do arquivo Createtable.sql para criar a tabela
5) inicie o cliente mysql, copie / cole a maior parte do comando 'LOAD DATA INFILE' que substitui minha tabela nome e nome do arquivo csv. Cole no arquivo FieldList.txt. Certifique-se de incluir 'IGNORE 1 LINES' antes de colar na lista de campos
Parece muito trabalho, mas fácil com emacs .....
fonte
Use o aplicativo TablePlus: Clique com o botão direito do mouse no nome da tabela no painel direito Escolha Importar ...> De CSV Escolha arquivo CSV Revise a correspondência de coluna e clique em Importar Tudo pronto!
fonte
Eu tenho várias maneiras de pesquisar no google para importar csv para mysql, incluir "load data infile", usar mysql workbench, etc.
quando eu uso o botão de importação do mysql workbench, primeiro você precisa criar a tabela vazia por conta própria, definir cada tipo de coluna por conta própria. Nota: você deve adicionar a coluna ID no final como chave primária e não nula e auto_increment, caso contrário, o botão de importação não ficará visível posteriormente. No entanto, quando eu começo a carregar o arquivo CSV, nada carregado, parece um bug. Desisto.
Sorte, a melhor maneira fácil que encontrei até agora é usar o mysql da Oracle para excel. você pode baixá-lo aqui mysql para excel
Isto é o que você vai fazer: abrir o arquivo csv no excel, na aba Dados, localizar mysql para o botão excel
selecione todos os dados, clique em exportar para mysql. Nota para definir uma coluna de ID como chave primária.
quando terminar, vá para o ambiente de trabalho mysql para alterar a tabela, como o tipo de moeda deve ser decimal (19,4) para decimal grande (10,2) para uso regular. outro tipo de campo pode ser definido como varchar (255).
fonte