Quel est le moyen le meilleur / le plus rapide pour télécharger un fichier csv dans une table mysql? Je voudrais que la première ligne de données soit utilisée comme noms de colonne.
Trouvé ceci:
Comment importer un fichier CSV dans une table MySQL
Mais la seule réponse était d'utiliser une interface graphique et non un shell?
Réponses:
Au lieu d'écrire un script pour extraire des informations d'un fichier CSV, vous pouvez lier directement MYSQL à celui-ci et télécharger les informations à l'aide de la syntaxe SQL suivante.
Pour importer un fichier Excel dans MySQL, exportez-le d'abord sous forme de fichier CSV. Supprimez les en-têtes CSV du fichier CSV généré ainsi que les données vides qu'Excel peut avoir placées à la fin du fichier CSV.
Vous pouvez ensuite l'importer dans une table MySQL en exécutant:
comme lisez la suite: Importez le fichier CSV directement dans MySQL
ÉDITER
Pour votre cas, vous devrez d'abord écrire un interpréteur, pour trouver la première ligne et les affecter comme noms de colonne.
EDIT-2
À partir de la documentation MySQL sur la
LOAD DATA
syntaxe :Par conséquent, vous pouvez utiliser l'instruction suivante:
la source
IGNORE 1 LINES
à la requêteVoici un simple script de ligne de commande PHP qui fera ce dont vous avez besoin:
Il créera une table basée sur la première ligne et y importera les lignes restantes. Voici la syntaxe de la ligne de commande:
la source
fields terminated by ','
... cela fonctionne même avec des CSV partiellement double guillemets.ENCLOSED BY '\"'
... aussi, beaucoup de gens auront besoinLINES TERMINATED BY '\r\n'
si vous utilisez un CSV de Windows. Et enfin, il est judicieux d'échapper aux noms de champs avec des backticks au cas où il y aurait des espaces:$columns .= "`$column` varchar(250)";
si vous avez la possibilité d'installer phpadmin, il y a une section d'importation où vous pouvez importer des fichiers csv dans votre base de données, il y a même une case à cocher pour définir l'en-tête sur la première ligne du fichier contient les noms des colonnes de la table (si cela n'est pas coché, le la première ligne fera partie des données
la source
Créez d'abord une table dans la base de données avec le même nombre de colonnes que dans le fichier csv.
Ensuite, utilisez la requête suivante
la source
Pour charger des données à partir d'un fichier texte ou d'un fichier csv, la commande est
Dans la commande ci-dessus, dans mon cas, il n'y a qu'une seule colonne à charger, donc il n'y a pas de "terminé par" et "entouré par" donc je l'ai gardé vide sinon le programmeur peut entrer le caractère de séparation. par exemple. , (virgule) ou "ou; ou quoi que ce soit.
** pour les personnes qui utilisent mysql version 5 et supérieure **
Avant de charger le fichier dans mysql, assurez-vous que la ligne de remorquage ci-dessous est ajoutée à côté
etc/mysql/my.cnf
pour modifier la commande my.cnf est
sudo vi /etc/mysql/my.cnf
la source
Si vous démarrez mysql en tant que "mysql -u -p --local-infile", cela fonctionnera correctement
la source
J'ai écrit du code pour ce faire, je vais mettre quelques extraits:
Ensuite, récupérez les en-têtes CSV afin de pouvoir dire à mysql comment importer (note: assurez-vous que vos colonnes mysql correspondent exactement aux colonnes csv):
Envoyez ensuite votre requête au serveur mysql:
la source
J'ai lutté avec ça pendant un certain temps. Le problème ne réside pas dans la façon de charger les données, mais dans la façon de construire la table pour les contenir. Vous devez générer une instruction DDL pour créer la table avant d'importer les données.
Particulièrement difficile si le tableau comporte un grand nombre de colonnes.
Voici un script python qui fait (presque) le travail:
Le problème qu'il reste à résoudre est que le nom de champ final et la déclaration du type de données se terminent par une virgule, et l'analyseur mySQL ne le tolérera pas.
Bien sûr, il a également le problème qu'il utilise le type de données TEXT pour chaque champ. Si la table a plusieurs centaines de colonnes, alors VARCHAR (64) rendra la table trop grande.
Cela semble également casser au nombre maximum de colonnes pour mySQL. C'est à ce moment qu'il est temps de passer à Hive ou HBase si vous le pouvez.
la source
Voici comment je l'ai fait en Python en utilisant csv et le connecteur MySQL :
Points clés
'rb'
binaireskipinitialspace
option.255
n'est pas assez large, vous obtiendrez des erreurs sur INSERT et devrez recommencer.ALTER TABLE t MODIFY `Amount` DECIMAL(11,2);
ALTER TABLE t ADD `id` INT PRIMARY KEY AUTO_INCREMENT;
la source
Importer des fichiers CSV dans la table mysql
visites: http://www.webslessons.com/2014/02/import-csv-files-using-php-and-mysql.html
la source
Comme d'autres l'ont mentionné, le fichier local des données de chargement fonctionne très bien. J'ai essayé le script php publié par Hawkee, mais cela n'a pas fonctionné pour moi. Plutôt que de le déboguer, voici ce que j'ai fait:
1) copiez / collez la ligne d'en-tête du fichier CSV dans un fichier txt et éditez avec emacs. ajoutez une virgule et un CR entre chaque champ pour obtenir chacun sur sa propre ligne.
2) Enregistrez ce fichier sous FieldList.txt
3) modifiez le fichier pour inclure defns pour chaque champ (la plupart étaient varchar, mais un certain nombre étaient int (x). Ajoutez create table tablename (au début du fichier et) au fin du fichier. Enregistrez-le sous CreateTable.sql
4) démarrez le client mysql avec l'entrée du fichier Createtable.sql pour créer la table
5) démarrez le client mysql, copiez / collez dans la plupart de la commande 'LOAD DATA INFILE' remplaçant ma table nom et nom de fichier csv. Collez le fichier FieldList.txt. Assurez-vous d'inclure les 'IGNORER 1 LIGNES' avant de coller dans la liste des champs
Cela semble beaucoup de travail, mais facile avec emacs .....
la source
Utilisez l'application TablePlus: Cliquez avec le bouton droit sur le nom de la table dans le panneau de droite Choisissez Importer ...> À partir de CSV Choisissez un fichier CSV Vérifiez la correspondance des colonnes et appuyez sur Tout importer!
la source
J'ai une recherche sur Google de nombreuses façons d'importer csv dans mysql, d'inclure "load data infile", d'utiliser mysql workbench, etc.
lorsque j'utilise le bouton d'importation de mysql workbench, vous devez d'abord créer vous-même la table vide, définir chaque type de colonne vous-même. Remarque: vous devez ajouter la colonne ID à la fin en tant que clé primaire et non null et auto_increment, sinon, le bouton d'importation ne sera pas visible plus tard. Cependant, lorsque je commence à charger le fichier CSV, rien n'est chargé, cela semble être un bogue. J'abandonne.
Heureusement, le meilleur moyen simple que j'ai trouvé jusqu'à présent est d'utiliser le mysql d'Oracle pour Excel. vous pouvez le télécharger ici mysql pour excel
Voici ce que vous allez faire: ouvrez le fichier csv dans Excel, dans l'onglet Données, trouvez mysql pour le bouton Excel
sélectionnez toutes les données, cliquez sur exporter vers mysql. Remarque pour définir une colonne ID comme clé primaire.
une fois terminé, accédez à mysql workbench pour modifier la table, par exemple, le type de devise doit être décimal (19,4) pour un grand nombre décimal (10,2) pour une utilisation régulière. un autre type de champ peut être défini sur varchar (255).
la source