Как экспортировать / вывести таблицу MySql в текстовый файл, включающий имена полей (так называемые заголовки или имена столбцов) - PullRequest
16 голосов
/ 04 ноября 2008

В интерпретаторе MySql очень просто вывести таблицу на экран вместе с ее именами полей.

Кажется, нет простого способа экспортировать таблицу в файл с разделителями табуляции или CSV-файл , включая заголовки столбцов.

Я пытаюсь сделать это, используя только SQL или командную строку Linux, без написания программы на другом языке.

Спасибо

Ответы [ 6 ]

20 голосов
/ 04 ноября 2008

Передача запроса клиенту командной строки выводит разделенный табуляцией список с именами столбцов в первой строке

$ 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
9 голосов
/ 02 апреля 2012

Этот маленький скрипт должен сделать это:

- 1. выберите таблицу и выходной файл здесь / это должен быть единственный ввод

select 'mytable' into @tableName;
select 'c://temp/test.csv' into @outputFile;

- 2. получить имена столбцов в формате, который будет соответствовать запросу

select group_concat(concat("'",column_name, "'")) into @columnNames from information_schema.columns
where table_name=@tableName;

- 3. построить запрос

SET @query = CONCAT(
"select * from
((SELECT ",@columnNames,")
UNION
(SELECT * FROM `",@tableName,"`)) as a
INTO OUTFILE '", @outputFile, "'");

- 4. выполнить запрос

PREPARE stmt FROM @query;
EXECUTE stmt;
3 голосов
/ 22 июня 2012

Я добился этого таким образом:

echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv

Опция -B mysql разделяет столбцы на вкладки, которые преобразуются в запятые с помощью sed. Обратите внимание, что заголовки тоже генерируются.

1 голос
/ 04 ноября 2008

Вы можете сделать это с помощью команды mysqldump . Посмотрите параметры --tab и --xml.

0 голосов
/ 22 января 2018

Я использовал вышеуказанную команду и изменил ее в соответствии с моими требованиями.
Мне нужно было получить столбец паролей из базы данных WordPress MySQL в текстовом файле, для этого я использовал следующую команду:

echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt
0 голосов
/ 24 июня 2012

Я создал процедуру для автоматизации экспорта содержимого большего количества таблиц в файл .csv с помощью SELECT ... INTO OUTFILE. Пожалуйста, обратитесь к следующему, если вам нужно что-то вроде этого

http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/.

Используется метод, описанный cafe876, но он будет работать для одной или целой серии таблиц, плюс вы можете установить используемый символ разделителя и кавычки.

...