Comment exporter / vider une table MySql dans un fichier texte incluant les noms de champs (en-têtes ou noms de colonnes)

StackOverflow https://stackoverflow.com/questions/262924

  •  06-07-2019
  •  | 
  •  

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

Était-ce utile?

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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top