Comment exporter / vider une table MySql dans un fichier texte incluant les noms de champs (en-têtes ou noms de colonnes)
Question
Dans l'interpréteur de MySql, il est très facile d'afficher un tableau à l'écran avec ses noms de champs.
Il ne semble pas exister de moyen simple d’exporter une table dans un fichier CSV délimité par des tabulations ou , y compris ses en-têtes de colonnes.
J'essaie de le faire en utilisant uniquement le SQL ou la ligne de commande Linux, sans écrire un programme dans une autre langue.
Merci
La solution
Piping de la requête vers le client en ligne de commande génère une liste séparée par des tabulations avec les noms des colonnes en première ligne
$ echo "select * from surveys limit 5" | mysql -uroot -pGandalf surveys
phone param1 param2 param3 param4 p0 p1 p2 p3 audio4 code time
XXXXXXXXX 2008-07-02 11:17:23 XXXXXXXX SAT - - - - - ERROR 2008-07-02 12:18:32
XXXXXXXXX 2008-07-02 11:22:52 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:04:29
XXXXXXXXX 2008-07-02 11:41:29 XXXXXXXX SAT - - - - - COLGADO 2008-07-02 12:07:22
XXXXXXXXX 2008-07-02 12:16:19 XXXXXXXX SAT 1 1 1 9 XXXXXXXXX_4.wav OK 2008-07-02 16:14:27
XXXXXXXXX 2008-07-02 08:21:25 XXXXXXXX SAT 1 1 1 1 XXXXXXXXX_4.wav OK 2008-07-02 12:29:40
Autres conseils
Ce petit script devrait le faire:
- 1. Choisissez la table et le fichier de sortie ici / ceci devrait être la seule entrée
select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;
- 2. Obtenez les noms de colonne dans un format qui conviendra à la requête
select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;
- 3. construire la requête
SET @query = CONCAT(
"select * from
((SELECT ",@columnNames,")
UNION
(SELECT * FROM `",@tableName,"`)) as a
INTO OUTFILE '", @outputFile, "'");
- 4. exécuter la requête
PREPARE stmt FROM @query;
EXECUTE stmt;
J'ai réalisé cela de cette manière:
echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv
L'option -B de mysql sépare les colonnes en onglets, qui sont convertis en virgules à l'aide de sed. Notez que les en-têtes sont également générés.
Vous pouvez le faire avec la commande mysqldump . Regardez les options --tab et --xml.
J'ai créé une procédure permettant d'automatiser l'exportation du contenu d'un plus grand nombre de tables dans un fichier .csv à l'aide de SELECT ... INTO OUTFILE
. Veuillez vous référer à ce qui suit si vous avez besoin de quelque chose comme ceci
http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/ .
Il utilise la méthode décrite par cafe876, mais fonctionnera pour une ou plusieurs séries de tables. Vous pouvez également définir le délimiteur et le caractère de citation à utiliser.
J'ai utilisé la commande ci-dessus et modifié en fonction de mes besoins.
Je devais obtenir la colonne mots de passe de la base de données wordpress mysql dans un fichier texte. Pour ce faire, j’ai utilisé la commande ci-dessous
echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt