Comment exporter une base de données MySQL en JSON?
Je suis intéressé par l'exportation d'un sous-ensemble de valeurs à partir d'une base de données MySQL dans un fichier au format JSON sur le disque.
J'ai trouvé un lien qui parle d'un possible moyen de le faire: http://www.thomasfrank.se/mysql_to_json.html
... mais quand j'utilise la méthode de la page, il semble que le travail, mais avec deux problèmes:
1) Il ne revient autour de 15 résultats, avec le dernier brusquement coupé (incomplet). Ma requête standard pour cela renvoie aux alentours de 4000 résultats quand je viens de le lancer en tant qu' SELECT name, email FROM students WHERE enrolled IS NULL
Mais quand je le lance comme:
SELECT
CONCAT("[",
GROUP_CONCAT(
CONCAT("{name:'",name,"'"),
CONCAT(",email:'",email,"'}")
)
,"]")
AS json FROM students WHERE enrolled IS NULL;
... comme décrit dans le lien, il retourne uniquement (comme je l'ai mentionné) 15 résultats. (fwiw, j'ai vérifié ces résultats avec les 4000 que je suis censé obtenir, et ces 15 sont les mêmes que les 15 premiers de l'4000)
2) Il semble y avoir de "s'échapper" les caractères inclus dans le fichier, quand j'ajoute INTO OUTFILE '/path/to/jsonoutput.txt' FIELDS TERMINATED BY ','
à la fin de la requête. Donc des virgules finir par ressembler à '\', alors évidemment, je voudrais juste avoir les virgules sans le \.
Aucune idée sur la façon d'obtenir une sortie JSON à partir de MySQL? (Soit à l'aide de cette méthode, ou une autre méthode)?
Merci!
- Pour une coquille en fonction de la solution, vous pouvez exécuter votre requête et de sortie json à l'aide de jo, ou vous pourriez transférer votre sortie de la requête pour export-mysql-à-json.
Vous devez vous connecter pour publier un commentaire.
Il est peut-être trop en demander à MySQL de s'attendre à produire bien formé json directement à partir d'une requête. Au lieu de cela, envisager de produire quelque chose de plus pratique, comme CSV (à l'aide de la
INTO OUTFILE '/path/to/output.csv' FIELDS TERMINATED BY ','
extrait de code que vous connaissez déjà) et ensuite transformer les résultats en json dans une langue avec construit dans le support, comme python ou php.Modifier python exemple, à l'aide de l'amende SQLAlchemy:
Si vous avez Ruby, vous pouvez installer le mysql2xxxx gem (pas le mysql2json gem, qui est un autre joyau):
puis exécutez la commande
Le gem fournit également
mysql2csv
etmysql2xml
. Il n'est pas aussi rapide que mysqldump, mais aussi de ne pas subir de certains de mysqldump est weirdnesses (comme le seul être capable de vidage CSV à partir du même ordinateur que le serveur MySQL lui-même)Une autre possibilité est d'utiliser le MySQL Workbench.
Il y a un JSON option d'exportation dans le menu contextuel de l'explorateur d'objets et à la suite de la grille de menu.
Plus d'informations sur Documentation de MySQL: les Données d'exportation et d'importation.
C'est quelque chose qui devrait être fait dans la couche application.
Par exemple, en php c'est un s simple que
Modifier Ajout de la connexion aux bases de trucs. Externe ne rien nécessaire.
$stmt -> execute();
aussi avantfetchAll()
.HeidiSQL vous permet de le faire.
Mettre en évidence toutes les données dans l'onglet DONNÉES, ou dans l'ensemble de résultats de requête... puis faites un clic droit et sélectionnez Exporter les Lignes de la Grille de l'option.
Cette option permet ensuite vous pouvez exporter vos données en JSON, directement dans le presse papier ou directement dans le fichier:
Une autre solution, si vous êtes à l'aide de Ruby, est d'écrire un script de connexion à la base de données avec ActiveRecord. Vous devez installer en premier
gem install activerecord
Vous pouvez également ajouter des méthodes aux classes ActiveRecord si vous souhaitez manipuler des données ou d'inclure ou d'exclure certaines colonnes.
Avec ActiveRecord vous n'êtes pas limité en JSON. Vous pouvez facilement exporter au format XML ou YAML
Vous n'êtes pas limité à MySQL. Une base de données pris en charge par ActiveRecord (Postgres, SQLite3, Oracle, etc...).
Et il vaut la peine de mentionner que vous pourriez ouvrir une autre poignée pour une base de données
Voici un rapide petit billet de blog à ce sujet http://www.seanbehan.com/how-to-export-a-mysql-database-to-json-csv-and-xml-with-ruby-and-the-activerecord-gem
Je sais que c'est vieux, mais pour le bien de quelqu'un qui cherche une réponse...
Il y a une librairie JSON pour MYSQL qui peut être trouvé ici Vous avez besoin d'avoir accès à la racine de votre serveur et être à l'aise pour installer des plugins (c'est simple).
1) télécharger le lib_mysqludf_json.donc dans le répertoire plugins de votre installation de mysql
2) exécutez le lib_mysqludf_json.fichier sql (c'est à peu près fait tout le travail pour vous. Si vous rencontrez un problème il suffit de supprimer tout ce qui commence par " GOUTTE à la FONCTION...')
3) le codage de votre requête dans quelque chose comme ceci:
et il sera de retour quelque chose comme
Vous pouvez exporter n'importe quelle requête SQL en JSON directement à partir de PHPMyAdmin
C'est parce que mysql limite la longueur des données retournées par le groupe concat à la valeur définie dans @@group_concat_max_len dès qu'il pénètre à ce montant, il tronque et renvoie ce que c'est arrivé si loin.
Vous pouvez définir @@group_concat_max_len en quelques manières différentes. référence La documentation de mysql...
Aussi, Si vous êtes à l'exportation dans la couche d'application, n'oubliez pas de limiter les résultats.
Par exemple, si vous avez 10M lignes, vous devriez obtenir des résultats en partie.
De l'utilisation de MySQL Shell, vous pouvez mettre directement en JSON à l'aide de seulement terminal
mysqlsh
, et comment il est différent de lamysql
(cli) de commande que nous avons utilisé pour plus d'une décennie, ne noter qu'ils sont complètement différents outils. Lemysql
(cli) ne dispose pas de ce format JSON de soutien-vous devez installermysqlsh
séparément. Plus d'infos: mysqlserverteam.com/...Utiliser les éléments suivants du code ruby
Pour quelqu'un qui veut le faire à l'aide de Python, et être en mesure d'exporter toutes les tables sans predefinining noms de champ, etc, j'ai écrit un petit script pour cela, l'autre jour, j'espère que quelqu'un le trouve utile:
Ce serait peut-être plus de niche répondre, mais si vous êtes sur windows et MYSQL Workbench, vous pouvez simplement sélectionner la table que vous souhaitez et cliquez sur Exporter/Importer dans la grille des résultats. Cela vous donnera de multiples options de format, y compris .json