Bonjour,
est ce qu'il y'a un moyen d'exporter toutes mes tables de ma base de données Mysql dans un fichier csv ou excel avec Ruby.
Merci d'avance
Bonjour,
est ce qu'il y'a un moyen d'exporter toutes mes tables de ma base de données Mysql dans un fichier csv ou excel avec Ruby.
Merci d'avance
Toutes tes tables dans un seul fichier CSV ?
Mais elles n'ont pas les mêmes colonnes, donc je dirais non.
En plus comment veux-tu afficher les associations (ex : user_id ou une colonne "user name") ?
20 tables dans 20 CSV, pourquoi pas.
20 tables dans 1 XLS de 20 onglets, pourquoi pas.
À toi de voir si tu veux 20 exports ou 1 export.
À toi de voir si tu veux faire ça à partir d'un outil SQL direct (mysqldump, pgdump),
ou dans un outil Ruby/Rails classique : vidéo et code ici
https://gorails.com/episodes/export-to-csv
20 tables dans 20 fichiers csv ça me va mais j'utilise pas rails moi. Je veux juste un script simple en ruby executé même en ligne de commande.
je voulais passer par une seule requête " SELECT id, filename INTO OUTFILE '/home/results.csv' FROM attachments"
mais je suis bloqué avec ce message d'erreur" Can't create/write to file '/path/file.csv' (Errcode: 13 “Permission denied”)"
alors que j'ai modifié tous les droits d'accés
N'importe quel client DB pourrait le faire, pas besoin de passer par un script Ruby, tu vas passer plus de temps pour configurer tes modèles, surtout si le schéma ne suit pas les conventions de nommage RoR. EN général un simple clique soit sur une table soit le schema et le tour est joué.
Oui c'est vrai mais quand il s'agit de 1000 et quelques tables je pense que c'est mieux de faire un script (une fonction) qui prend en paramètre le nom de la table et sort le resultat.
c'est mon idée je sais pas ce que t'en pense?
Je te laissse juste de comparer cette commande:
où table_1, table_2, table_3 sont les noms des tables à exporter, filename.sql - fichier cible d'exportation.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 mysqldump -u user -p database_name table_1 table_2 table_3 > filename.sql
Si tu veux les exporter vers un fichier CSV, tu peux t'inspirer de la doc de mysqldump, permettant de préciser type de séparateur et d'autres options.
Pour ces choses-là, une command pure SQL sera toujours beaucoup plus rapide que n'importe quel ORM.
Perso, j'utilise Ruby uniquement quand il s'agit de mapper des données vers des modèles différents, surtout lorsque un legacy DB ne suit pas les conventions RoR.
Imagine, pour 1000 tables tu seras obligé de créer 1000 modèles !!!! Sinon, comment envisages-tu de mapper tes données ?
Et puis, même après avoir les données de toutes tes tables en CSV - ce n'est pas pour n'en rien faire après, non, je suppose ? Dons tu devrais de tout façon parser tous ces CSV et seras obligé d'avoir autant de modèles AR ou juste classes Ruby, ça dépend de la tache finale ...
j'utilise pas le modèle MVC. Je pense que un simple script (programme) ruby avec une fonction d'exportation fera l'affaire.
j'envissage même de l'exécuter en ligne de commande './nom_programme.rb'
C n'a rien à voir avec MVC, bien sur.
Pour te connecter à une DB, tu as besoin d'utiliser un ActiveRecord adapter (si tu utilises ActiveRecord comme ORM), ou un autre, ROM, par exemple, mais le principe reste le même.
Pour cela il faudra définir les paramètres de connexion à la DB (nom, host, port, user name, password, etc.).
Pour pouvoir lire les données d'une table, il faut indiquer à ton adapter quelle table correspond à quel modèle (class) dans ton code Ruby. Si tu ne l'indiques pas, ActiveRecord va utiliser ses conventions de nommage: class Person -> tables People, class User -> table Users, etc. Mais on peux les surcharger (override).
Exemple:
Il n'y aucun problème de sauvegarder ce code dans un ficher toto.rb et l'exécuter depuis ton terminal (Windows console) comme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 require 'active_record' require 'mysql2' ActiveRecord::Base.establish_connection( adapter: 'mysql2', encoding: 'utf8', database: 'p15t01', pool: 5, host: 'some.weird.host.francetelecom.fr', username: 'some_user_name', password: 'changeme' ) class Commune < ActiveRecord::Base self.table_name = 'VILLAGES' # juste pour te montrer comment on peut surcharger le nom utilisé par convention end puts "records found: #{Commune.count}"
et il sera exécuté.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 ruby path/to/toto.rb
Pour ce qui est lecture CSV, tu peux regarder un exemple ici.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager