mygems

Convertir un CSV en instructions SQL INSERT

Un CSV en entrée, un script .sql que n’importe quelle base exécute.

  • PostgreSQL, MySQL, SQLite
  • Types de colonnes détectés
  • Guillemets correctement échappés
  • Rien n’est envoyé

1.Ouvrez le fichier

CSV ou TSV. Glissez-le ici, ou choisissez un fichier.

Pourquoi ça existe

Les assistants d’import des bases de données sont pointilleux sur les CSV, et les chargeurs en ligne de commande demandent un accès aux fichiers que le serveur de base de données n’a souvent pas. Un simple script .sql marche partout où une requête marche. Mais l’écrire à la main, c’est là que les guillemets se trompent : une apostrophe dans un nom de famille casse tout le script, et une barre oblique inverse non échappée corrompt une ligne dans MySQL. Ici, le script est écrit avec l’échappement dont chaque base a réellement besoin.

Ce que ça fait

  • Écrit une instruction CREATE TABLE avec un type pour chaque colonne, décidé d’après toutes ses valeurs.
  • Écrit les lignes en instructions INSERT à plusieurs lignes, par lots de la taille de votre choix.
  • Met les noms entre guillemets et échappe les valeurs pour la base choisie, y compris les barres obliques inverses de MySQL.
  • Écrit les cellules vides en NULL et garde en texte les colonnes avec des zéros en tête ou de très longs nombres.
  • Peut tout englober dans une transaction : un échec en cours de route laisse la base comme elle était.

Pourquoi des lots

Un INSERT par ligne est lent à exécuter, et un seul INSERT pour un million de lignes est trop gros pour la plupart des serveurs. Quelques centaines de lignes par instruction restent rapides et sous les limites habituelles de taille de paquet et d’instruction ; baissez ce nombre si votre serveur proteste.

Questions

Quelles bases de données sont prises en charge ?
PostgreSQL, MySQL et MariaDB, et SQLite. Les scripts sont du SQL standard : les autres bases qui suivent la norme, comme SQL Server pour les instructions INSERT, les acceptent en général avec de petites retouches du CREATE TABLE.
Comment les types de colonnes sont-ils choisis ?
D’après toutes les valeurs de la colonne. Une colonne d’entiers devient BIGINT, les décimaux un type à virgule flottante, vrai/faux BOOLEAN, les dates ISO DATE, et tout le reste, y compris les nombres avec zéros en tête, devient TEXT. Vous pouvez modifier le CREATE TABLE dans le script avant de l’exécuter.
Est-ce sûr à exécuter sur une base de production ?
Le script ne fait que créer une table et y insérer des lignes. Lisez-le d’abord, comme n’importe quel script : l’aperçu en montre le début, et le nom de la table est à vous.