Как вывести результаты запроса MySQL в формате CSV?

Фактически я сделал это для точки данных на презентации, которую я собираю. Тест сортирует массив из 250 000 целых чисел, используя собственную функцию сортировки и реализацию алгоритма быстрой сортировки, написанного на php. Содержимое массива одинаково для обоих прогонов, данные рандомизированы, а время, указанное только для выполнения сортировки, а не для другой обработки, необходимой для вызова интерпретатора php.

Результаты:

  Native sort implementation:  1.379 seconds
PHP quicksort implementation: 30.615 seconds

Определенно использовать встроенную реализацию. Это должно быть для любого интерпретируемого языка.

Результаты для других языков, которые я тестировал с одинаковыми условиями, используя ту же самую реализацию на одном и том же оборудовании и ОС, обеспечивают интересное сравнение производительности и ставят результат PHP в перспективе:

               C: 0.107 seconds
            Java: 0.250 seconds
JavaScript (FF3): 4.401 seconds

Примечательно, что Chrome и Safari выполнили много быстрее для теста JavaScript, но я не включаю их здесь, потому что эти тесты были записаны в другой среде .

1073
задан codeforester 7 July 2018 в 15:26
поделиться

5 ответов

От не будет экспортироваться http://www.tech-recipes.com/rx/1475/save-mysql-query-results-into-a-text-or-csv-file/

SELECT order_id,product_name,qty
FROM orders
WHERE foo = 'bar'
INTO OUTFILE '/var/lib/mysql-files/orders.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

Используя эту команду названия столбцов.

Также примечание, которое /var/lib/mysql-files/orders.csv будет на сервер , который выполняет MySQL. У пользователя, под которым работает процесс MySQL, должны быть полномочия записать в каталог, выбранный, или команда перестанет работать.

, Если Вы хотите записать вывод в свою локальную машину от удаленного сервера (особенно размещенный или виртуализировать машину, такую как Heroku или Amazon RDS), это решение не подходит.

1623
ответ дан Patrick M 7 July 2018 в 15:26
поделиться
  • 1
    Ясно. Спасибо за Ваши предложения. Я should' ve, сделанный больше reasearch об этом сервисе нажатия прежде, чем выбрать мою веб-платформу платформы. Хотя быть честным во время ранних стадий моего веб-приложения I' ve никогда мысль о необходимости в сервисе нажатия. Теперь я просто думаю, что было бы хорошо иметь его, но только в расширении, я восстановлю свой проект с новым бэкендом. Кроме того, благодарит за предложение Django-websockets! Я мог бы просто чинить вокруг с ним.:) – evkwan 30 March 2011 в 12:34

Кроме того, к ответу выше, у Вас может быть таблица MySQL, которая использует механизм CSV.

Затем у Вас будет файл на Вашем жестком диске, который всегда будет в формате CSV, который Вы могли просто скопировать, не обрабатывая его.

10
ответ дан Jonathan 8 July 2018 в 01:26
поделиться
  • 1
    Очевидно, вопросы о приеме и ответы... никто не заботится о здесь.. что не так в этом ответе.. можно ли объяснить Marcin – Monotosh Mondal 11 September 2013 в 16:28

mysql --batch, -B

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

Это даст вам файл, разделенный табуляцией. Поскольку запятые (или строки, содержащие запятую) не экранируются, изменить разделитель на запятую непросто.

198
ответ дан 19 December 2019 в 20:16
поделиться
$ mysql your_database --password=foo < my_requests.sql > out.csv

Которая разделена табуляцией. Протестируйте его так, чтобы получить настоящий CSV (спасибо @therefromhere):

... .sql | sed 's/\t/,/g' > out.csv
432
ответ дан 19 December 2019 в 20:16
поделиться

Решение OUTFILE, данное Полом Томблином, вызывает запись файла на самом сервере MySQL, поэтому это будет работать, только если у вас есть доступ к FILE , а также доступ для входа в систему или другие средства для получения файл из этого ящика.

Если у вас нет такого доступа и вывод с разделителями табуляции является разумной заменой CSV (например, если ваша конечная цель - импортировать в Excel), тогда решение Сербаута (с использованием mysql --batch и, возможно, - необработанный ).

39
ответ дан 19 December 2019 в 20:16
поделиться
Другие вопросы по тегам:

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