Is er een gemakkelijke manier om een MySQL query uit te voeren vanaf de Linux opdrachtregel en de resultaten in CSV formaat uit te voeren?
Hier's wat ik nu aan het doen ben:
mysql -u uid -ppwd -D dbname << EOQ | sed -e 's/ /,/g' | tee list.csv
select id, concat("\"",name,"\"") as name
from students
EOQ
Het wordt rommelig als er veel kolommen zijn die omgeven moeten worden door aanhalingstekens, of als er aanhalingstekens in de resultaten staan die geëscaped moeten worden.
Van 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';
Als u dit commando gebruikt, worden kolommen niet geëxporteerd.
Merk ook op dat /var/lib/mysql-files/orders.csv
op de server zal staan waar MySQL op draait. De gebruiker onder wie MySQL draait moet schrijfrechten hebben in de gekozen directory, anders zal het commando mislukken.
Als u uitvoer wilt schrijven naar uw lokale machine vanaf een externe server (vooral een gehoste of gevirtualiseerde machine zoals Heroku of Amazon RDS), is deze oplossing niet geschikt.
mysql --batch, -B
Print resultaten met tab als scheidingsteken, met elke rij op een nieuwe regel. Met deze optie, mysql maakt geen gebruik van de geschiedenis bestand. Batch mode resulteert in een niet-tabulaire output formaat en escaping van speciale tekens. Escaping kan worden uitgeschakeld door gebruik te maken van raw mode; zie de beschrijving voor de --raw optie.
Dit zal een tab-gescheiden bestand opleveren. Aangezien komma's (of strings die komma's bevatten) niet worden ge-escaped, is het niet eenvoudig om het scheidingsteken in komma's te veranderen.
Als alternatief voor het bovenstaande antwoord, kunt u een MySQL tabel hebben die de CSV engine gebruikt.
Dan hebt u een bestand op uw harde schijf dat altijd in CSV-formaat zal zijn en dat u gewoon kunt kopiëren zonder het te bewerken.