A tarefa que finalmente me fez construir isso foi chata e me custou uma hora que EU não tinha Um cliente me entregou uma planilha de 1.800 linhas de produtos e me pediu para carregá-la em seu banco de dados de estadiamento antes de uma demonstração na manhã seguinte Sem API, sem tela de importação, apenas um CSV e uma tabela MySQL esperando por isso Eu fiz o que todo mundo faz da primeira vez: EU abri o arquivo, escrevi um par de instruções INSERT à mão para obter a forma certa, e comecei a copiar valores em Três linhas depois um nome de produto com um apóstrofo nele, O'Brien's Tools, quebrou toda a declaração, porque a única citação fechou a string cedo e MySQL sufocado sobre o resto Esse é o momento em que você percebe SQL de escrita à mão de uma planilha não é um trabalho de cinco minutos, é um campo minado citando com 1.800 chances de dar um passo errado Então EU construí o Conversor CSV para SQL, e este guia é o raciocínio por trás de cada opção nele contida.
tl;dr: Um conversor CSV para SQL lê um arquivo CSV e gera o
CREATE TABLEeINSERTinstruções um banco de dados precisa armazená-lo A ferramenta Toolz analisa o arquivo com uma máquina de estado RFC 4180, infere se cada coluna é um inteiro, decimal, booleano ou texto, cita identificadores para MySQL, PostgreSQL ou SQLite, escapa de cada valor corretamente e transforma células vazias emNULL. Cole o CSV, escolha seu dialeto e copie um script que você pode executar imediatamente Tudo é executado no lado do cliente: sem upload, sem inscrição, funciona offline.
Eu construo produtos SaaS no Laravel e React e envio plugins WordPress, então carregar dados tabulares em um banco de dados é uma tarefa semanal, em vez de única. Às vezes é uma exportação de cliente, às vezes um arquivo inicial para um ambiente novo, às vezes um acessório rápido para um teste CSV é sempre o formato em que chega, e SQL é sempre onde precisa acabar Chegando de um para o outro à mão é exatamente o tipo de trabalho repetitivo e propenso a erros que uma ferramenta de navegador deve apagar, então este é o guia que EU gostaria de ter quando aquele apóstrofo quebrou minha importação.
O que é um conversor CSV para SQL?
Um conversor CSV para SQL pega linhas de valores separados por vírgulas e produz instruções SQL que criam uma tabela e carregam os dados nela. O próprio CSV é apenas vagamente padronizado - RFC 4180 descreve a forma comum e é explícito que documenta a prática existente em vez de ditá-la Ele lê a primeira linha como os nomes das colunas, trata cada linha seguinte como um registro e emite duas coisas: a CREATE TABLE instrução que define as colunas com tipos sensíveis e um conjunto de INSERT instruções que carregam os valores A saída é um script SQL simples que você pode colar em um cliente de banco de dados, como TablePlus ou DBeaver, cair em uma migração ou pipe no mysql, psql, ou sqlite3 linha de comando para construir e preencher a tabela em uma única etapa.
A razão pela qual a categoria existe é que a tradução é mexida de maneiras que são fáceis de subestimar Todo valor de texto tem que ser envolto em aspas simples Cada citação dentro de um valor tem que ser duplicada para que não termine a string Números e booleanos devem ser deixados sem aspas ou o banco de dados irá armazená-los como texto e seu WHERE price > 100 irá se comportar de maneira estranha As células vazias geralmente precisam se tornar NULL em vez de uma string vazia Os nomes das colunas com espaços ou palavras reservadas têm que ser citados com o caractere certo para o seu banco de dados Perca qualquer um desses em alguns milhares de linhas e todo o lote falha, muitas vezes com um erro que aponta para a linha errada Um conversor aplica todas essas regras da mesma maneira todas as vezes, que é toda a proposta de valor.
Como a ferramenta decide cada coluna's tipo?
Esta é a parte que separa um conversor útil de um burro Uma ferramenta ingênua faz cada coluna TEXT e chama isso de feito, que tecnicamente funciona, mas dá-lhe uma tabela onde os números ordenam como strings e você não pode fazer aritmética sem casting O Toolz ferramenta CSV para SQL em vez disso, verifica cada valor de uma coluna e escolhe o tipo mais restrito que se adapta a todos eles.
A lógica é direta uma vez que você vê Se todo valor não vazio em uma coluna é um número inteiro, a coluna se torna um tipo inteiro Se todo valor é numérico, mas alguns têm pontos decimais, torna-se um tipo flutuante Se todo valor é a palavra true ou false, torna-se um booleano Qualquer outra coisa, incluindo conteúdo misto e qualquer coisa com letras, cai de volta para o texto Há uma exceção deliberada que pega as pessoas de uma maneira boa: um valor como 007 ou 00123 permanece texto, não um número inteiro, porque um zero à esquerda quase sempre significa que a coluna é um ID, um código postal ou um número de telefone onde o zero é significativo e seria perdido se armazenado como um número Essa única regra me salvou de corromper silenciosamente mais de uma coluna SKU do produto.
Você pode desligar a inferência se preferir que cada coluna seja texto, que é a escolha segura quando você planeja alterar os tipos sozinho após o carregamento Mas para o caso comum, deixar a ferramenta inferir tipos significa o gerado CREATE TABLE corresponde aos dados em vez de achatá-los, e a tabela pode ser usada no momento em que existe.
Qual dialeto SQL devo escolher?
SQL é um padrão da maneira que a ortografia Inglês é um padrão, o que é dizer que cada banco de dados tem seu próprio sotaque O dialeto que você escolher muda três coisas na saída: como identificadores são citados, como os nomes de tipo são chamados, e como verdadeiro e falso são escritos Aqui é como as quatro opções diferem.
| Preocupação | mysql | PostgreSQL | SQLite | SQL padrão |
|---|---|---|---|---|
| Cotação identificador | Retroilúvios `col` |
Cotações duplas "col" |
Cotações duplas "col" |
Cotações duplas "col" |
| Tipo inteiro | INT |
INTEGER |
INTEGER |
INTEGER |
| Tipo decimal | DOUBLE |
DOUBLE PRECISION |
REAL |
REAL |
| Tipo booleano | TINYINT(1) |
BOOLEAN |
INTEGER |
BOOLEAN |
| Tipo de texto | VARCHAR(255) |
TEXT |
TEXT |
TEXT |
| Valores booleanos | 1 / 0 |
TRUE / FALSE |
1 / 0 |
TRUE / FALSE |
A orientação prática é combinar o dialeto com o banco de dados em que você está realmente carregando, porque as diferenças não são cosméticas O MySQL rejeitará os identificadores com aspas duplas que o PostgreSQL deseja, a menos que você esteja no modo ANSI, e o PostgreSQL não tem TINYINT. SQLite não possui nenhum tipo booleano real, então os booleanos se tornam inteiros, e é por isso que a ferramenta escreve 1 e 0 tanto para MySQL quanto para SQLite, mas TRUE e FALSE para PostgreSQL e SQL padrão. se você não tem certeza ou você está escrevendo algo portátil, SQL padrão é a escolha mais conservadora Uma vez que as instruções são geradas você sempre pode executá-los através do formatador sql para imprimir a saída antes de entrar em um arquivo de migração.
Como faço para converter um CSV para SQL com a ferramenta?
O fluxo é deliberadamente curto Cole seu CSV na caixa de entrada ou clique em Carregar amostra para ver um exemplo trabalhado com um id, um nome, uma função, um booleano e uma coluna salarial.
Defina o nome da tabela como a tabela de destino deve ser chamada e escolha o seu dialeto SQL. Em seguida, decida as opções de saída. Deixe o & quot; Incluir CRIAR TABELA e quot; ativado se a tabela ainda não existir ou desligue-a para gerar apenas o INSERT declarações quando você estiver carregando em uma tabela que já está lá Mantenha o & quot; Inferir tipos de coluna & quot; ligado para uma tabela digitada ou desligado para fazer todo o texto Escolha & quot; Insert" de várias linhas; para uma instrução compacta com muitas tuplas de valor, que carrega mais rápido, ou desligue-a para obter uma INSERT por linha, que é mais amigável ao controlo de versão e permite - lhe executar as linhas individualmente Deixe o & quot; Células vazias como NULL" ligado, a menos que queira especificamente cadeias vazias armazenadas.
O delimitador pode ser detectado automaticamente ou definido manualmente. Detecte automaticamente as pontuações vírgula, ponto e vírgula, guia e pipe pela consistência com que cada uma divide as primeiras linhas no mesmo número de colunas, o que lida corretamente com arquivos de ponto e vírgula europeus e exportações separadas por tabulações Clique em Converter em SQL e a saída aparece com uma contagem de linhas e colunas, além de quaisquer avisos sobre nomes de colunas duplicados ou linhas irregulares Copie e execute-o Se a exportação chegou sem uma linha de cabeçalho, desligue o & quot; Primeira linha é header" e a ferramenta nomeia as colunas column_1, column_2, e assim por diante, então trata cada linha como dados.
Por que o valor correto que escapa é tão importante?
Porque o escape incorreto não é apenas um bug, é uma classe de vulnerabilidade de segurança O apóstrofo que quebrou minha primeira importação manualmente é o mesmo mecanismo por trás da injeção de SQL: uma única citação dentro de um valor, se não escapou, termina a string cedo e deixa que o que se segue seja interpretado como SQL Em um aplicativo você resolve isso com consultas parametrizadas, onde o driver de banco de dados mantém valores e código estritamente separados Quando você está gerando um script SQL estático a partir de um CSV, você não tem essa separação, então o escape tem que ser correto no próprio texto gerado.
A ferramenta segue a regra ANSI SQL: um valor de texto é envolto em aspas simples, e qualquer citação única dentro do valor é duplicada Então O'Brien's Tools torna-se 'O''Brien''s Tools', que cada um dos bancos de dados suportados lê como a string original. Números e booleanos são emitidos sem aspas para que sejam armazenados como o tipo certo, e os identificadores são citados com o dialeto & #39; próprio caractere, então uma coluna é chamada order ou select não colide com uma palavra reservada Este é exatamente o tipo de correção tediosa que os seres humanos erram sob pressão de tempo e uma ferramenta acerta todas as vezes, que é o ponto inteiro de automatizá-lo Se você está curioso sobre como o escape se compara entre formatos, o Conversor CSV para JSON enfrenta o mesmo problema do lado JSON, onde o caractere de escape é uma barra invertida em vez de uma citação duplicada.
É seguro converter dados confidenciais do CSV online?
Para esta ferramenta, sim, e a razão é arquitetural ao invés de uma promessa em uma página Cada passo, analisando o CSV, inferindo tipos de coluna, escapando valores, e construindo as declarações, é executado como JavaScript dentro de sua própria guia do navegador Não há upload, nenhum servidor de ida e volta, e nada é registrado ou armazenado Você pode provar isso abrindo o seu navegador' s tab de rede e clicando Converter: nenhum pedido sai da página Uma vez que a página carregou você pode se desconectar da internet inteiramente e ele continua gerando SQL.
Isso importa porque as pessoas CSVs converter para SQL são muitas vezes os arquivos mais sensíveis que um negócio tem tabelas de clientes, históricos de pedidos, registros de usuários e dados de preços todos viajam como CSV antes de pousar em um banco de dados Um conversor que carrega seu arquivo para um servidor, por mais bem intencionado, transforma uma planilha privada em outra pessoa & #39; s log entry O processamento do lado do cliente remove a pergunta inteiramente: os dados nunca saem da máquina que começou Esse padrão é deliberado em todas as ferramentas no Toolz.dev, e EU escrevi o argumento mais longo no guia de privacidade de dados para ferramentas online para quem quiser o raciocínio completo.
Onde o CSV para SQL se encaixa em um fluxo de trabalho real?
A conversão raramente é o trabalho inteiro, é uma estação em um pipeline O padrão que EU bati com mais frequência é semear: um cliente envia uma planilha, EU converto em um script SQL e EU executo esse script para preencher um banco de dados de encenação ou desenvolvimento para que o aplicativo tenha dados realistas para trabalhar porque a saída é um script simples em vez de uma conexão ao vivo, é fácil verificar em um repo como um arquivo seed, revisar em uma solicitação pull e executar novamente em qualquer ambiente.
As ferramentas ao seu redor dependem do que os dados estão fazendo a seguir Se EU precisar olhar o arquivo como uma grade classificável antes da conversão, o Visualizador CSV renderiza a mesma análise RFC 4180 de uma tabela para que eu possa identificar uma linha malformada antes que ela se torne malformada INSERT. Se o destino for uma API ou um arquivo de configuração em vez de um banco de dados, o Conversor CSV para JSON em vez disso, é o salto certo e seu irmão json para csv lida com o inverso quando preciso devolver os dados como uma planilha. E uma vez que o SQL exista, o formatador sql arruma-o em algo legível para uma migração Nenhum destes carrega os seus dados, para que possa encadeá-los no mesmo ficheiro privado sem pensar duas vezes Se estiver a montar um kit para este tipo de trabalho de dados, meu Guia do kit de ferramentas para desenvolvedores web caminha sobre como as peças se conectam.
Quais são os limites que vale a pena conhecer?
Honestidade sobre limites é parte da confiança em uma ferramenta O conversor gera padrão CREATE TABLE e INSERT instruções, o que significa que não infere chaves primárias, chaves estrangeiras, índices ou restrições de coluna, porque nenhuma dessas informações existe em um CSV plano. Ele escolhe um tipo razoável para cada coluna, mas VARCHAR(255) para MySQL texto é um padrão, não uma medida; se você tiver uma coluna de descrições longas, você pode querer alargá-la para TEXT após o carregamento, e se você tiver uma coluna que deveria ser DATE ou DATETIME você vai querer alterá-lo, já que a ferramenta trata as datas como texto para evitar adivinhar um formato errado.
A multi-linha INSERT é compacto e rápido, mas arquivos muito grandes produzem uma única instrução muito longa, e alguns bancos de dados limitam o tamanho de uma instrução ou o número de espaços reservados. Se você estiver carregando dezenas de milhares de linhas e atingir um limite, mude para uma INSERT por linha, que negocia um script maior para declarações que um banco de dados sempre aceitará Finalmente, a ferramenta é para gerar scripts de carga, não para transmitir um arquivo multi-gigabyte, porque toda a entrada vive na memória do navegador Para exportações diárias, arquivos de semente e acessórios, que é o que a maioria das pessoas realmente tem, nenhum desses limites morder Saber que eles existem é apenas a diferença entre usar uma ferramenta bem e ser surpreendido por ela.
Perguntas frequentes
Como faço para converter um arquivo CSV para SQL?
Cole o CSV no Conversor CSV para SQL, defina o nome da tabela e escolha seu dialeto SQL. Ele lê a linha do cabeçalho como nomes de colunas, infere cada tipo de coluna e gera um CREATE TABLE mais INSERT declarações que você pode copiar e executar em seu banco de dados Tudo acontece em seu navegador, para que o arquivo nunca seja carregado.
Quais bancos de dados SQL ele suporta?
O conversor emite instruções para MySQL, PostgreSQL, SQLite e SQL padrão O dialeto escolhido controla a citação do identificador e o tipo e a sintaxe booleana, portanto o script é executado nesse banco de dados sem edições. MySQL usa backticks e TINYINT(1) booleanos, enquanto PostgreSQL e SQL padrão usam aspas duplas e TRUE ou FALSE.
Como ele decide os tipos de coluna?
Cada coluna é verificada em relação a cada valor nos dados Se todos os valores não vazios são números inteiros a coluna se torna um tipo inteiro, todos os números se tornam um tipo decimal, todos os valores verdadeiros ou falsos se tornam um tipo booleano, e qualquer outra coisa se torna um valor com um zero à esquerda, como 007 permanece texto porque geralmente é um identificador significativo. Você pode desativar a inferência para criar cada texto de coluna.
Cria a tabela ou apenas as inserções?
Ambos por omissão Emite a CREATE TABLE instrução com os tipos de coluna inferidos seguida pelo INSERT declarações. Você pode virar o CREATE TABLE desligado quando a tabela já existe e você só precisa carregar linhas.
Como são tratadas as citações e os caracteres especiais?
Os valores de texto são envoltos em aspas simples e qualquer aspa única dentro de um valor é duplicada, que é o escape SQL padrão, portanto O'Brien torna-se 'O''Brien'. Números e booleanos são deixados sem citação, e identificadores são citados com backticks para MySQL ou aspas duplas para os outros dialetos, então uma palavra reservada como order não quebra a declaração.
O que acontece com as células vazias?
Por padrão, uma célula vazia se torna NULL, que é normalmente o que deseja para um valor em falta Se preferir armazenar uma cadeia vazia em vez disso, desligue a opção vazia como NULL e as células vazias tornam - se duas aspas simples.
Posso converter um CSV que não tenha linha de cabeçalho?
Sim. Desligue a opção de cabeçalho e a ferramenta nomeia as colunas column_1, column_2, e assim por diante, então trata cada linha como dados Isso é útil para exportações brutas que enviam sem uma linha de cabeçalho.
Meus arquivos CSV são carregados em qualquer lugar? No. Parsing e geração de SQL são executados como JavaScript no seu navegador Nada é transmitido, registrado ou armazenado, e a ferramenta continua funcionando offline uma vez carregada, o que você pode confirmar assistindo a guia de rede enquanto você converte.



