Czy istnieje prosty sposób na uruchomienie zapytania MySQL z linii poleceń systemu Linux i wyprowadzenie wyników w formacie CSV ?
Oto, co teraz robię:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Robi się bałagan, gdy jest wiele kolumn, które muszą być otoczone cudzysłowami, lub jeśli w wynikach są cudzysłowy, które muszą być ucieczką.
Ze strony 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';
Przy użyciu tego polecenia nazwy kolumn nie zostaną wyeksportowane.
Należy również pamiętać, że /var/lib/mysql-files/orders.csv
będzie znajdował się na serwerze, na którym uruchomiony jest MySQL. Użytkownik, pod którym uruchomiony jest proces MySQL musi mieć uprawnienia do zapisu w wybranym katalogu, w przeciwnym razie polecenie nie powiedzie się.
Jeśli chcesz zapisywać dane wyjściowe do lokalnego komputera ze zdalnego serwera (szczególnie hostowanego lub wirtualizowanego, takiego jak Heroku lub Amazon RDS), to rozwiązanie nie jest odpowiednie.
mysql --batch, -B
Drukuj wyniki używając tabulacji jako separatora kolumn, z każdym wierszem w nowym wierszu. nowej linii. Przy tej opcji mysql nie używa pliku historii. Tryb wsadowy powoduje, że format wyjściowy nie jest tabelaryczny, a znaki specjalne są ucieczką. znaków specjalnych. Ucieczka może być wyłączona przez użycie trybu surowego; zobacz opis opcji --raw.
Da to plik rozdzielony tabulatorami. Ponieważ przecinki (lub łańcuchy zawierające przecinki) nie są wymykane, nie jest prosto zmienić ogranicznik na przecinek.