Contexte

Un script Python rapidement bidouillé pour transformer les fichiers mysqldump en fichiers CSV. Optimisé pour les dumps de bases de données Wikipédia.

Des dumps MySQL extrêmement volumineux peuvent être difficiles ou impossibles à importer sur du matériel assez limité. La chose ennuyeuse à propos d’un dump MySQL est que la seule façon pratique de le manipuler est à travers MySQL, ce qui nécessite essentiellement une mise à niveau du matériel si l’on veut travailler avec de grands dumps comme les dumps MySQL de Wikipédia.

Ne serait-il pas génial s’il y avait un moyen de convertir le format du dump MySQL (qui est une série d’instructions INSERT) en un format universel… comme… CSV ?

Eh bien, maintenant il y en a un.

Ce court script Python profite du fait que la structure d’une instruction INSERT MySQL n’est pas trop différente du CSV, et utilise l’analyseur CSV de Python (avant et après quelques manipulations de texte) pour transformer le fichier dump MySQL en fichier CSV.

Utilisation

Il suffit d’exécuter python mysqldump_to_csv.py suivi du nom de fichier d’un fichier SQL. Vous pouvez spécifier plusieurs fichiers SQL, et ils seront tous concaténés en un seul fichier CSV. Ce script peut également prendre des fichiers SQL depuis l’entrée standard, ce qui peut être utile pour transformer un dump MySQL gzippé en un fichier CSV sans décompresser le dump MySQL.

zcat dumpfile.sql.gz | python mysqldump_to_csv.py

Comment ça marche

Le SQL suivant:

INSERT INTO `page` VALUES (1,0,'April','',1,0,0,0.778582929065,'20140312223924','20140312223929',4657771,20236,0),(2,0,'August','',0,0,0,0.123830928525,'20140312221818','20140312221822',4360163,11466,0);

est transformé en CSV suivant:

1,0,April,1,0,0,0.778582929065,20140312223924,20140312223929,4657771,20236,02,0,August,0,0,0,0.123830928525,20140312221818,20140312221822,4360163,11466,0

Il n’est pas trop difficile de voir ce qui se passe, mais vous pouvez certainement regarder le code source pour voir exactement comment la transformation est faite.

Todo

  • Une série rigoureuse de tests unitaires, prouvant que cela fonctionne sur un ensemble diversifié de fichiers dump MySQL sans aucun effet secondaire
  • Un peu plus de documentation
  • Une solution à un bug où une colonne est une chaîne se terminant par ) et la colonne suivante est une chaîne commençant par (. La logique actuelle du programme suggère que les parenthèses seraient supprimées.