Πώς να εξάγετε τα αποτελέσματα του ερωτήματος MySQL σε μορφή CSV;

Υπάρχει ένας εύκολος τρόπος να εκτελέσετε ένα ερώτημα MySQL από τη γραμμή εντολών του Linux και να εξάγετε τα αποτελέσματα σε μορφή CSV ;

Εδώ είναι αυτό που κάνω τώρα:

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

Γίνεται ακατάστατο όταν υπάρχουν πολλές στήλες που πρέπει να περιβάλλονται από εισαγωγικά, ή αν υπάρχουν εισαγωγικά στα αποτελέσματα που πρέπει να διαφύγουν.

Λύση

Από το 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 θα βρίσκεται στον server που τρέχει τη MySQL. Ο χρήστης με τον οποίο εκτελείται η διεργασία MySQL πρέπει να έχει δικαιώματα εγγραφής στον επιλεγμένο κατάλογο, αλλιώς η εντολή θα αποτύχει.

Αν θέλετε να γράψετε την έξοδο στο τοπικό σας μηχάνημα από έναν απομακρυσμένο διακομιστή (ειδικά ένα μηχάνημα που φιλοξενείται ή εικονικοποιείται, όπως το Heroku ή το Amazon RDS), αυτή η λύση δεν είναι κατάλληλη.

Σχόλια (31)

mysql --batch, -B &gt, Εκτύπωση των αποτελεσμάτων χρησιμοποιώντας tab ως διαχωριστικό στήλης, με κάθε γραμμή σε μια νέα γραμμή. Με αυτή την επιλογή, η mysql δεν χρησιμοποιεί το αρχείο ιστορικού. Η λειτουργία παρτίδας έχει ως αποτέλεσμα τη μορφή εξόδου χωρίς πίνακες και τη διαφυγή των ειδικών χαρακτήρων. Η διαφυγή μπορεί να απενεργοποιηθεί με τη χρήση του raw mode- βλ. την περιγραφή της επιλογής --raw.

Αυτό θα σας δώσει ένα αρχείο με διαχωρισμό καρτελών. Δεδομένου ότι τα κόμματα (ή οι συμβολοσειρές που περιέχουν κόμμα) δεν αποφεύγονται, δεν είναι απλό να αλλάξετε το διαχωριστικό σε κόμμα.

Σχόλια (9)

Εναλλακτικά προς την παραπάνω απάντηση, μπορείτε να έχετε έναν πίνακα MySQL που χρησιμοποιεί τη μηχανή CSV.

Τότε θα έχετε ένα αρχείο στον σκληρό σας δίσκο που θα είναι πάντα σε μορφή CSV, το οποίο θα μπορείτε απλώς να αντιγράψετε χωρίς να το επεξεργαστείτε.

Σχόλια (2)