Dica de Importação CSV para Mysql

Olá pessoal, gostaria de postar uma dica que poderá ajudar muita gente.
Abaixo deixarei um código de importação de arquivos csv para mysql (banco).
Você pode implementar em um controle no SC.

LOAD DATA LOCAL INFILE 'c:/Users/Fred/Desktop/municipios.csv'  //Aqui vc especifica o local do arquivo
INTO TABLE municipios          //Aqui você especifica o nome da tabela
FIELDS TERMINATED BY ';'    //Aqui será o tipo de separador 
 LINES TERMINATED BY '\r\n'   //Aqui é a quebra de cada linha por inserts
(uf, codigo, nome)   // Aqui você coloca os campos na mesma sequencia das células do arquivo.csv

Fiz um teste com esse exemplo com 5567 registros e ele importou em um segundo.

Espero que ajude a alguém.

Abraço a todos.

1 Curtida

Esse método é antigo, só funciona se o servidor MySQL estiver em localhost na mesma hospedagem, e se o usuário clicar para importar 2x o arquivo ele vai dar erro, já que tentara
importar as mesmas informações.

Caso o desenvolver quiser importar tabelas para seus projetos melhor usar ferramentas, PhpMyAdmin, etc, agora se for para nível de projeto usar fopen, fget, para ler e tratar
o arquivo .csv devidamente antes de efetuar os inserts na Base.

Se estuda mais “um pouquinho” você descobrirá que funcionará na web. Acabei de importar mais de 5 mil registro em segundos e na Web.

Acho que o Jailton tem razão.

Para que funcione é preciso colocar o arquivo em uma pasta na estrutura arquivos que o banco tenha acesso e o php, e por questões de segurança isso nunca é permitido.

Fazíamos muito isso em servidores locais, mas na web, acho difícil esse procedimento ser usado hoje em dia.

Ok, mas os amigos então podem postar um exemplo que seria tido como correto e usual para enriquecer o forum?

Olá,

Se o banco for MySQL, podes usar o MySQL Workbench para fazer isso facilmente. Ou então olhar links como este: https://imasters.com.br/artigo/3746/mysql/importando-arquivos-csv-para-mysql?trace=1519021197&source=single

Caso for fazer direto pelo SC crie uma app controle ou formulário com upload para nome arquivo e um campo chamado {Status}

// Exemplo de Script para LER CSV exibir os nomes obtidos no arquivo CSV de exemplo

/* As vezes se pegar Textos do Windows com acentos ISO-8859-1 que é o padrão:
$_string=utf8_encode(‘Vocês em ações.’); // Codifica um string ISO-8859-1 para UTF-8
// $_string=utf8_decode(‘Vocês em ações.’); // Decodifica um string UTF-8 para ISO-8859-1

echo $_string;
*/

// CÓDIGO (OnValidate) :

// Pegando o arquivo com caminho
$caminho = $this->Ini->path_doc;
$_arquivo = $caminho.’/’.{arquivo};

$_Delimitador = ‘;’;
$_Cerca = ‘’;

$_Cadastrados=0;

// Abrir arquivo para leitura
$arq = fopen($_arquivo, ‘r’);
if ($arq) {

// Ler cabecalho do arquivo
$cabecalho = fgetcsv($arq, 0, $_Delimitador, $_Cerca);

// Enquanto nao terminar o arquivo
while (!feof($arq)) {

    // Ler uma linha do arquivo
    $linha = fgetcsv($arq, 0, $_Delimitador, $_Cerca);
    if (!$linha) {
        continue;
    }

    // Montar registro com valores indexados pelo cabecalho
    $registro = array_combine($cabecalho, $linha);

    // Obtendo campos do CSV
	// Olhar no Seu CSV como estão os NOMES CABEÇALHO dos campos e colocar ['NOME_CAMPO']
    $_CPF_CNPJ = $registro['CPF_CNPJ'];
	$_CD_SERVICO = $registro['CD_SERVICO'];
	$_DT_PESSOA_SERVICO = $registro['DT_PESSOA_SERVICO'];
	$_QT_PESSOA_SERVICO = $registro['QT_PESSOA_SERVICO'];
	$_VL_PESSOA_SERVICO = $registro['VL_PESSOA_SERVICO'];
	$_DS_OBSERVACAO = $registro['DS_OBSERVACAO'];
	$_DS_CONVENIO = $registro['DS_CONVENIO'];
	$_DT_CADASTRO = $registro['DT_CADASTRO'];
	$_CD_USUARIO_CADASTRO = $registro['CD_USUARIO_CADASTRO'];
	$_DT_ATUALIZACAO = $registro['DT_ATUALIZACAO'];
	$_CD_USUARIO_ATUALIZACAO = $registro['CD_USUARIO_ATUALIZACAO'];

	$insert_table  = 'TB_BI_PESSOA_SERVICO';  // Nome da Tabela
	$insert_fields = array(
		'CPF_CNPJ'               => "'$_CPF_CNPJ'",
		'CD_SERVICO'             => "$_CD_SERVICO",
		'DT_PESSOA_SERVICO'      => "'$_DT_PESSOA_SERVICO'",
		'QT_PESSOA_SERVICO'      => "$_QT_PESSOA_SERVICO",
		'VL_PESSOA_SERVICO'      => "$_VL_PESSOA_SERVICO",
		'DS_OBSERVACAO'          => "'$_DS_OBSERVACAO'",
		'DS_CONVENIO'            => "'$_DS_CONVENIO'",
		'DT_CADASTRO'            => "'$_DT_CADASTRO'",
		'CD_USUARIO_CADASTRO'    => "$_CD_USUARIO_CADASTRO",
		'DS_CONVENIO'            => "'$_DS_CONVENIO'",
		'DT_ATUALIZACAO'         => "'$_DT_ATUALIZACAO'",
		'CD_USUARIO_ATUALIZACAO' => "$_CD_USUARIO_ATUALIZACAO"
	);

	// Inserir registro
	$insert_sql = 'INSERT INTO ' . $insert_table
		. ' (' . implode(', ', array_keys($insert_fields)) . ')'
		. ' VALUES (' . implode(', ', array_values($insert_fields)) . ')';

	sc_exec_sql($insert_sql);

	$_Cadastrados++;

} // Fim: while (!feof($arq))

fclose($arq);

}

if ($cadastrados==0) {
sc_error_message(“Não há registros a atualizar, verifique”);
} else {
sc_error_message("Lojas cadastradas: " . $_Cadastrados);
}

{Status}="** Concluído **";

1 Curtida

Kleber, bom dia. Como faço para importar um arquivo csv pelo mysql workbench. Estou tentando fazer isso e vi sua resposta no fórum.

Segue link: https://dev.mysql.com/doc/workbench/en/wb-admin-export-import-table.html