Извлеките имена столбцов таблицы mysql с помощью awk / grep и используйте awk для печати xml - PullRequest
2 голосов
/ 09 ноября 2010

У меня есть база данных mysql, в конце я хочу иметь xml-файл, например, так:

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

Нет обработки выходных данных, я уверен, что могу сделать с помощью awk или чего-то еще, но получитьимя столбца из файла схемы.Я потерялся?

Ответы [ 3 ]

2 голосов
/ 09 ноября 2010

Альтернативный способ сделать это - использовать mysqldump --xml option - выходные данные отличаются от того, что вы обрисовали в общих чертах выше, но ничего, что вы не могли бы преобразовать впоследствии ... вот как данные схемы может искать вас (если вам нужна только схема, вы также можете использовать --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>
1 голос
/ 09 ноября 2010

Будет сгенерирован текстовый файл с двумя полями: имя_таблицы и имя столбца

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

, тогда вы можете написать простой скрипт 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); }
1 голос
/ 09 ноября 2010

чтобы получить имена таблиц:

Select `table_name` FROM `information_schema`.TABLES

и затем из каждой таблицы столбцы:

DESCRIBE `table_name`;

или

SHOW COLUMNS FROM `table_name`; 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...