Подтвердить что ты не робот

MySQL дамп в текстовые файлы CSV с именами столбцов вверху?

Возможный дубликат:
Как экспортировать/выгрузить таблицу MySql в текстовый файл, включая имена полей (также имена заголовков или столбцов)

Я использую этот фрагмент SQL для вывода таблицы в текстовые файлы CSV:

SELECT * FROM brand INTO OUTFILE "e:/brand.csv" ПОЛЯ, ПРОВЕРЯЕМЫЕ ',' ЗАКЛЮЧЕНЫ '' ' ЛИНИИ, ПРЕКРАЩЕННЫЕ "\n";

Однако этот подход не добавляет имена столбцов в начале файла CSV. Мой вопрос заключается в том, как выбрать все имена столбцов и полей, точно так же, как это делает phpMyAdmin при экспорте таблицы и выбрать "Поместить имена полей в первую строку".

4b9b3361

Ответ 1

Я выяснил, как нужно вручную вводить эти имена, если вы используете MySQL 5 или выше. Здесь он написан как bash script для работы в командной строке unix:

DBNAME=<database_name>
TABLE=<table_name>

FNAME=/path/to/output/dir/$(date +%Y.%m.%d)-$DBNAME.csv

#(1)creates empty file and sets up column names using the information_schema
mysql -u <username> -p<password> $DBNAME -B -e "SELECT COLUMN_NAME FROM information_schema.COLUMNS C WHERE table_name = '$TABLE';" | awk '{print $1}' | grep -iv ^COLUMN_NAME$ | sed 's/^/"/g;s/$/"/g' | tr '\n' ',' > $FNAME

#(2)appends newline to mark beginning of data vs. column titles
echo "" >> $FNAME

#(3)dumps data from DB into /var/mysql/tempfile.csv
mysql -u <username> -p<password> $DBNAME -B -e "SELECT * INTO OUTFILE '/var/mysql/tempfile.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' FROM $TABLE;"

#(4)merges data file and file w/ column names
cat /var/mysql/tempfile.csv >> $FNAME

#(5)deletes tempfile
rm -rf /var/mysql/tempfile.csv

Хотя это не самое изящное решение, я уверен, что он может быть сжат в одну строку тем, кто знает SQL и/или bash немного лучше меня...

Что он делает:

  • использует схему информации MySQL для создания пустых заголовков CSV w/column
  • добавляет дополнительную строку новой строки в этот пустой CSV, поэтому ваши данные начнут появляться в новой строке
  • использует довольно стандартный запрос "SELECT * INTO OUTFILE..." для создания CSV с данными.
  • добавляет файл данных в файл с заголовками столбцов
  • удаляет (временный) файл данных

Удачи, и если вы его очистите, опубликуйте свои результаты!

Ответ 2

Я думаю, что это делает то, что вы хотите. Я использую mysql 5.1.60, это выводит имена полей в первой строке. Это будет использовать "\ t" в качестве разделителя полей, я не уверен, как запросить запятую.

echo "SELECT * FROM brand;" | mysql -uXXX -pXXX databasename > brand.tsv