Importation cvs dans mysql

Importation cvs dans mysql - SQL/NoSQL - Programmation

Marsh Posté le 04-02-2015 à 18:34:34    

Bonjour à tous
 
J'espère être au bon endroit pour poser ma question.
 
Je souhaite importer un fichier cvs dans une table.
 
#cat Mon_fichier.cvs
prenom1, nom1, prénom1.nom1@exemple.com, password1
prenom2, nom2, prénom2.nom2@exemple.com, password2
prenom3, nom3, prénom3.nom3@exemple.com, password3
etc...
 
J'utilise la commande sql suivante :
 
mysql> LOAD DATA LOCAL INFILE '/home/redmail/Mon_fichier.cvs.' into table db.users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
 
L'import se passe bien (excepté pour les accents, mais c'est pas trop mon problème pour le moment...)
 
Mon problème et que "Mon_fichier.cvs" change tous les jours avec des ajouts et des suppressions d'utilisateur.
 
Comment tenir compte de ces modifications pour de pas avoir de double et supprimer les utilisateurs que n'existent plus ?
 
Merci d'avance pour votre aide.
 

Reply

Marsh Posté le 04-02-2015 à 18:34:34   

Reply

Marsh Posté le 05-02-2015 à 17:14:30    

redmail a écrit :

Bonjour à tous
 
J'espère être au bon endroit pour poser ma question.
 
Je souhaite importer un fichier cvs dans une table.
 
#cat Mon_fichier.cvs
prenom1, nom1, prénom1.nom1@exemple.com, password1
prenom2, nom2, prénom2.nom2@exemple.com, password2
prenom3, nom3, prénom3.nom3@exemple.com, password3
etc...
 
J'utilise la commande sql suivante :
 
mysql> LOAD DATA LOCAL INFILE '/home/redmail/Mon_fichier.cvs.' into table db.users FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';
 
L'import se passe bien (excepté pour les accents, mais c'est pas trop mon problème pour le moment...)
 
Mon problème et que "Mon_fichier.cvs" change tous les jours avec des ajouts et des suppressions d'utilisateur.
 
Comment tenir compte de ces modifications pour de pas avoir de double et supprimer les utilisateurs que n'existent plus ?
 
Merci d'avance pour votre aide.
 


 
Bonjour, j'ai peur que tu n'aies pas beaucoup de solution...
C'est le problème d'importer des données d'un fichier plat (ou csv) dans une base de données...
 
Il faut que tu fasses une petite moulinette :
pour créer une table tempo (que tu vides ou que tu recrées à chaque fois), dans laquelle tu vas importer tes données,  
puis tu vérifies pour chacun des utilisateurs si celui ci existe ou pas dans ta table finale, et faire un insert ou un update en fonction.
Pour la suppression, c'est à voir tes règles de gestion:
Est ce que tu envoies tout les utilisateurs dans ton .csv valides ? si oui dans ce cas, tu supprimes de la table réelle ceux qui ne sont pas dans la table tempo.
 
Guillaume


Message édité par gpl73 le 05-02-2015 à 17:19:15

---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 05-02-2015 à 19:33:43    

Bonjour et merci Guillaume pour ta réponse.
 
Effectivement, en principe, tous les utilisateurs se retrouvent dans mon .csv.
 
Je suis en train de me demander, si le plus simple n'est pas d'effacer et réimporter tous les utilisateurs dans ma table !?
 
J'avais juste envisagé une possibilité de mise à jour du password par l'utilisateur dans la db...  mais je pense qu'ils sont pas intéressé :D  
 
Par-contre, si j'ai un problème lors de la création du csv ... (faut le tester avant l'import...)

Reply

Marsh Posté le 05-02-2015 à 22:39:00    

Une question toute bête?
Est ce que tu es obligé de passer par un point csv...
dans ton dernier post, tu dis :  
"J'avais juste envisagé une possibilité de mise à jour du password par l'utilisateur dans la db...  mais je pense qu'ils sont pas intéressé :D  "
cela veut dire que tes utilisateurs ont accès à ta base?
ne serait il pas plus simple de faire tout dans la db? création suppression update de tes utilisateurs...
 
Guillaume


---------------
mieux vaut être un con au chaud, qu'un con gelé lol
Reply

Marsh Posté le 06-02-2015 à 09:23:20    

Non, je peux pas faire comme cela car les infos proviennent de la base ldap qui doit rester la principale base des utilisateurs. Je dois juste récupérer ces infos pour ma db mysql.
 
Si quelqu'un connait le moyen d'interroger directement ldap depuis mysql, je suis preneur !
 
En attendant, j'ai imaginé l'export ldap vers fichier csv puis import dans mysql.

Reply

Marsh Posté le 06-02-2015 à 09:57:38    

tu déclares le login de ton utilisateur comme une clé unique dans ta base MySQL
 
tu dis dans ta base que pour les doublons il faut mettre à jour les données : "ON DUPLICATE UPDATE"  
 
Par contre pour ceux qui n'existent plus, tu vas être un peu emmerdé, sauf à désactiver les agents  dans ton LDAP. Comme ça tu mets à jour les agents qui sont désactivés


---------------

Reply

Marsh Posté le 10-02-2015 à 22:51:48    

Bonsoir,  
 
Si tu peux travailler en bat et ligne de commande  
 
Télécharge  
 
iconv.exe avec les 3 dll suivant :
 
libcharset1.dll
libiconv2.dll
libintl3.dll
 
A placer dans un bat :
 
iconv -f windows-1252 -t UTF-8 [chemin_du_fichier_a_rencoder] [chemin_du_fichier_rencodé]

Reply

Marsh Posté le 11-02-2015 à 09:54:39    

Merci tanaka59 mais je n'utilise pas Windows mais uniquement Linux.

Reply

Marsh Posté le 11-02-2015 à 10:00:48    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed