Как экспортировать / вывести таблицу MySql в текстовый файл, включающий имена полей (так называемые заголовки или имена столбцов)
Вопрос
В интерпретаторе MySql очень просто вывести на экран таблицу вместе с ее именами полей. Р>
Похоже, не существует простого способа экспортировать таблицу в файл с разделителями табуляции или CSV-файл , включая заголовки столбцов.
Я пытаюсь сделать это, используя только SQL или командную строку Linux, без написания программы на другом языке.
Спасибо
Решение
Передача запроса клиенту командной строки выводит разделенный табуляцией список с именами столбцов в первой строке
$ 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
Другие советы
Этот маленький скрипт должен это сделать:
- 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;
Я добился этого таким образом:
echo "select * from table"| mysql database -B -udbuser -puser_passwd | sed s/\\t/,/g > query_output.csv
Опция -B mysql разделяет столбцы на вкладки, которые преобразуются в запятые с помощью sed. Обратите внимание, что заголовки тоже генерируются.
Это можно сделать с помощью команды mysqldump . Посмотрите на параметры --tab и --xml.
Я создал процедуру для автоматизации экспорта содержимого большего количества таблиц в файл .csv с помощью SELECT ... INTO OUTFILE
. Пожалуйста, обратитесь к следующему, если вам нужно что-то подобное
http://lifeboysays.wordpress.com/2012/06/23/mysql-how-to-export-data-to-csv-with-column-headers/ . р>
Используется метод, описанный cafe876, но он будет работать для одной или целой серии таблиц, плюс вы можете установить используемый символ разделителя и кавычки.
Я использовал вышеуказанную команду и изменил ее в соответствии с моими требованиями.
Мне нужно было получить столбец паролей из базы данных WordPress MySQL в текстовом файле, для этого я использовал следующую команду
echo "select user_pass from wp_users"| mysql -uroot -proot wp_database > passwordList.txt