29
Mar/092
Mar/092
Truc rapide pour faire un csv avec MySQL
Je dois régulièrement créer des rapports pour la comptabilité (et d’autres gens moins à l’aise avec des ordinateurs) au boulot. Le moyen facile est de leur envoyer le tout dans un fichier CSV converti en excel par email.
Il y a plusieurs manières de créer un CSV à partir de MySQL. Voici la manière que je qualifie de “standard”:
-
SELECT a,b,a+b INTO OUTFILE '/tmp/result.txt'
-
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
-
LINES TERMINATED BY '\n'
-
FROM test_table;
Une manière un peu plus rapide (trouvé en fouillant sur google):
-
mysql -umyUser-p dbName -B -e "SELECT a,b,a+b FROM test_table;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csv
Et maintenant.. (roulement de tambour).. “MA” manière!
-
CREATE TABLE test_table_csv SELECT a,b,a+b FROM test_table; ALTER test_table_csv ENGINE = csv;
Maintenant, si vous allez voir dans /var/lib/mysql/dbName/ vous y trouverez un fichier csv nommé test_table_csv.CSV. MySQL s’est occupé de la syntaxe “compliqué” pour nous! Le seul inconvénient de cette manière est que vous devez avoir les permissions pour lire /var/lib/mysql.
Enjoy this article?
Comments (2)
Trackbacks (0) ( subscribe to comments on this post )
Leave a comment
No trackbacks yet.
6:29 pm on April 1st, 2009
Peut-être est-ce que je me trompe, mais aucune des méthodes présentées ne gère le cas où il y a un ” dans la valeur du champ. Même si CSV n’est pas tellement bien défini (à ma connaissance, il n’y a pas de RFC ou de standard similaire pour le détailler), il est “de bon goût” d’utiliser les C-style escapes pour les caractères problématiques, comme “. Donc un ” dans une chaîne devrait être remplacé par \”.
9:03 pm on April 1st, 2009
Effectivement, les CSV sont très souples par définition. MySQL escape automatiquement le “delimiteur” utilisé lorsqu’il est rencontré. Donc la première et troisième méthode fonctionnent très bien. Dailleur, dans le 3ieme truc, il s’agit carrément du fichier dans lequel MySQL écrit ses données. Il escape donc toutsles mots-clef réservés.
Parcontre, tu as vu juste pour la 2ieme méthode. Le REGEX utilisé avec sed ne gère pas ce cas. Les champs sont initialement séparés par des tabs, et modifiés pour être “entouré” par des ” grace à l’expression régulière.
abc”def devient donc “abc”def”