Преобразуйте mysql результаты запроса в CSV (со скопировать/вставить)

Я часто работаю в командной строке mysql. Общая потребность состоит в том, чтобы взять результаты запроса и импортировать их в документ Чисел (подобный документу Excel).

Каков самый быстрый метод для того, чтобы сделать это?

Метод 1: Выберите в outfile

Можно выбрать в outfile непосредственно от MySQL, но это делает несколько шагов.

  1. экспортируйте свой запрос со всеми необходимыми аргументами для создания этого форматом CSV, как FIELDS OPTIONALY ENCLOSED BY и DELIMITED BY.
  2. sftp в сервер и захват файл
  3. удалите файл из сервера

Метод 2: скопировать/вставить

Я склонен делать этот метод. Для меня это кажется немного быстрее, но это главным образом, потому что я не помню, как создать SELECT INTO OUTFILE запросите сверху и имейте для поиска его.

  1. Скопировать/вставить к локальному текстовому файлу
  2. Открытый в текстовом редакторе и замене | с,
  3. Сохраните как CSV и открытый в Числах.

15
задан Gattster 25 February 2010 в 08:28
поделиться

6 ответов

Как насчет этого?:

mysql -B -e "$ MY_QUERY"> my_data.csv

Формат вывода фактически разделен табуляцией, а не запятой , но, по крайней мере, Excel и OpenOffice Calc автоматически адаптируется к этому.

Кстати, для удобства и для обеспечения неинтерактивного выполнения команд mysql я настоятельно рекомендую создать безопасный файл ~ / .my.cnf
(читаемый только вами ) с такими записями:

[client]
user=YOUR_MYSQL_USER_NAME
password=YOUR_MYSQL_PASSWORD
host=YOUR_MYSQL_SERVER
port=YOUR_MYSQL_SERVER_PORT
WHATEVER_OTHER_OPTIONS_YOU_LIKE

Ссылки:

http://dev.mysql.com/doc/refman/5.1/en/mysql-command-options.html

--batch, -B

Печатать результаты, используя табуляцию в качестве разделителя столбцов, с каждой строкой на новой строке. С этой опцией mysql не использует файл истории.

Пакетный режим приводит к нестандартному формату вывода и экранированию специальных символов. Экранирование можно отключить, используя необработанный режим; см. описание параметра --raw.

10
ответ дан 1 December 2019 в 03:34
поделиться

Установите панель инструментов отладки Django . Это дает вам все это и больше.

-121--1189255-

Вы также можете использовать утилиту командной строки MySQL с опцией -E и терпейте вывод в файл. Это выводят данные в формате разделите вкладки.

7
ответ дан 1 December 2019 в 03:34
поделиться

Вы можете выполнить запрос SELECT ... INTO OUTFILE на локальном компьютере и сохранить файл локально. Если у вас локально установлена ​​утилита командной строки mysql *, просто добавьте флаг -h для подключения к определенному хосту. mysql также может читать со стандартного ввода, поэтому вы можете настроить файл .sql, который вы будете использовать для импорта.

Файл SQL ( outfile.sql ):

SELECT * FROM myTable WHERE date>CURDATE()
INTO OUTFILE '/home/me/outfile.csv' -- Specify output file (if Windows, make sure
                                    -- to use backslashes and escape them 
                                    -- (C:\\Users\\<user>\\...)
FIELDS
    OPTIONALLY ENCLOSED BY '"'
    ESCAPED BY '"' -- Results in double quotation marks, which I have found Excel
                   -- requires (instead of using a backslash to escape)
    TERMINATED BY '\\n' -- or your line ending of choice
                        -- (i believe escaping is required)

Затем введите следующую команду:

mysql -u <user> -p -h <server_ip_address> <outfile.sql

Обратите внимание, что было бы неплохо создать нового пользователя, который может подключаться с вашего пульта дистанционного управления. IP-адрес с разрешениями FILE и только доступом SELECT к таблицам, которые необходимо запросить.

Сначала нужно немного настроить, но, в конце концов, вы можете просто вставить команду mysql в пакетный файл и сделать это в два клика.

* Я считаю, что вам нужно загрузить полную систему MySQL, которая поставляется с mysql CLI.

2
ответ дан 1 December 2019 в 03:34
поделиться

Возможно, вы ищете механизм рабочего процесса, такой как JBPM или любой другой инструмент с открытым исходным кодом, указанный здесь .

-121--4950351-

Вы можете обойти это еще проще с помощью Rebase extension , просто используйте hg pull --rebase , и ваши фиксаторы автоматически повторно присоединяются к извлеченной редакции, избегая проблемы ветвления.

-121--611197-

Ваш вариант 1 является лучшим, я думаю, - сделайте это один раз и напечатайте правильные варианты или даже лучше, создайте небольшой сценарий, который примет запрос и автоматически добавит ваши любимые варианты с вложением и разделителем.

Можно также пропустить шаги 2 и 3, если установить программу клиента mysql для вашей клиентской платформы и подключиться непосредственно к серверу mysql с вашей рабочей станции, если это возможно для вас.

0
ответ дан 1 December 2019 в 03:34
поделиться

В Excel есть функция Text to Columns в меню Data, которая позволяет задать пользовательский делиметр. Я предполагаю, что Numbers будет иметь аналогичную функциональность. Если это так, то решение заключается в копировании и вставке непосредственно в документ Numbers, а затем преобразовании этих текстовых ячеек в столбцы с указанием | в качестве разделителя.

0
ответ дан 1 December 2019 в 03:34
поделиться

Используйте свой первый метод со следующей модификацией:

Вместо запуска команды на сервере вы можете запустить ее на своем локальном компьютере и сохранить файл напрямую, без необходимости устанавливать sftp и удалять его. Для этого вам нужно ssh перенаправить порт mysql на свободный порт на вашем локальном компьютере.

ssh -L 3306:localhost:3306 user@remoteserver

Первый «3306» - это порт на локальной машине. "localhost" относится к имени хоста удаленного сервера. Второй «3306» - это порт на удаленной машине, который должен быть переадресован. Если сервер MySQL работает на другом порту, вы должны вместо этого использовать этот порт. После входа в систему вы держите сеанс ssh открытым до тех пор, пока хотите работать.

В новом окне терминала вы можете начать сеанс mysql.

mysql -hlocalhost -uUser -p --port=3306

Этот метод имеет то преимущество, что вам не нужно открывать доступ к серверу MySQL в Интернет, и вы передаете все данные через зашифрованный туннель.

2
ответ дан 1 December 2019 в 03:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: