Ako vypisovať výsledky dotazov MySQL vo formáte CSV?

Existuje jednoduchý spôsob, ako spustiť dotaz MySQL z príkazového riadku Linuxu a vypisovať výsledky vo formáte CSV ?

Toto je to, čo teraz robím:

mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/        /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ

Keď je veľa stĺpcov, ktoré treba obklopiť úvodzovkami, alebo ak sú vo výsledkoch úvodzovky, ktoré treba escapovať, začne to byť neprehľadné.

Riešenie

Z adresy 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';

Použitím tohto príkazu sa názvy stĺpcov neexportujú.

Tiež si uvedomte, že súbor /var/lib/mysql-files/orders.csv bude na serveri, na ktorom beží MySQL. Používateľ, pod ktorým beží proces MySQL, musí mať oprávnenia na zápis do zvoleného adresára, inak príkaz zlyhá.

Ak chcete zapisovať výstup na lokálny počítač zo vzdialeného servera (najmä hostovaného alebo virtualizovaného počítača, ako je Heroku alebo Amazon RDS), toto riešenie nie je vhodné.

Komentáre (31)

mysql --batch, -B

Vytlačiť výsledky s použitím tabulátora ako oddeľovača stĺpcov, pričom každý riadok bude na novom riadku. S touto voľbou mysql nepoužíva súbor histórie. Výsledkom dávkového režimu je netabuľkový formát výstupu a escapovanie špeciálnych znakov. Escapovanie je možné vypnúť použitím režimu raw; pozri popis možnosti --raw.

Takto získate súbor oddelený tabulátorom. Keďže sa čiarky (alebo reťazce obsahujúce čiarku) neeskvamujú, nie je jednoduché zmeniť oddeľovač na čiarku.

Komentáre (9)

Alternatívou k vyššie uvedenej odpovedi môže byť tabuľka MySQL, ktorá využíva engine CSV.

Potom budete mať na pevnom disku súbor, ktorý bude vždy vo formáte CSV, ktorý môžete jednoducho skopírovať bez spracovania.

Komentáre (2)