2010-11-09 13 views
2

J'ai une base de données MySQL, je veux avoir un fichier xml à la fin comme ceci:Extrait les noms de colonnes de table MySQL avec awk/grep et awk utiliser pour imprimer xml

<user> 
    <column>id</column> 
    <column>name</column> 
    <column>password</column> 
</user> 
<dept> 
    <column>id</column> 
    <column>name</column> 
    <column>code</column> 
</dept> 

Pas faire la partie formattage de sortie Je suis sûr que je peux faire avec awk ou quelque chose mais obtenir le nom de la colonne de comme un fichier de schéma. Je suis perdu ?

Répondre

1

pour obtenir les noms de table:

Select `table_name` FROM `information_schema`.TABLES 

puis de chaque tableau, les colonnes:

DESCRIBE `table_name`; 

ou

SHOW COLUMNS FROM `table_name`; 
1

Cela va générer un fichier texte avec deux champs: nom_table et nom de la colonne

SELECT TABLE_NAME, COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA='YourDatabase' 
ORDER BY COLUMN_NAME; 

alors vous pouvez écrire un simple script AWK:

BEGIN {table_name = -1;} 
    { 
     if (table_name != $1) { 
      if (table_name != -1) 
       printf("</%s>\n", table_name); 
      table_name = $1; 
      printf("<%s>\n", table_name); 
     } 
     printf("\t<column>%s</column>\n",$2); 
    } 
END { printf("</%s>\n", table_name); } 
2

Une autre façon de faire serait d'utiliser mysqldump --xml option - la sortie est différente de ce que vous schéma ci-dessus, mais rien ne vous pouvez pas transformer la suite ... voici comment les données du schéma peuvent vous chercher (si vous ne voulez que le schéma, vous utiliserez aussi --no-data)

<?xml version="1.0"?> 
<mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<database name="example"> 
<table_structure name="user"> 
<field Field="id" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> 
<field Field="name" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" /> 
<field Field="password" Type="varchar(128)" Null="NO" Key="" Default="" Extra="" /> 
</table_structure> 
</database> 
</mysqldump>