Batch Index du Forum
S’enregistrerRechercherFAQMembresGroupesConnexion
Répondre au sujet Page 2 sur 3
Aller à la page: <  1, 2, 3  >
[R] batch de mise à jour d'une BDD à partir d'un csv
Auteur Message
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Revue du message précédent :

ardigier a écrit:
Merci beaucoup pour ce batch,
J'ai compris ce que je dois faire

Je suppose que pour le host je dois indiquer "local host" sinon oú trouver son IP ,
ÉDIT j'ai trouvé c'est celui que tu as noté
Sachant que mon csv utilise le ; pour délimiter les colonnes et \n pour la fin de ligne, faut il le préciser dans le batch avec quelque chose qui ressemblerait à
Fields terminated by ';´
Lines terminated by ´\n'

ou alors la ligne echo;Row converted : !MySQLRow! suffit


Si ton csv est sous cette forme :
Citation:
124;12;35
22;42;785
785;8;325
0;125;368
258;12;45
3;778;124
123;456;7
741;852;9
369;7;258
23;35;588
119;712;0

alors tu n'as rien à changer à part ce que j'ai indiqué plus haut
j'ai juste oublié une petite imprécision, à la ligne 19 celle-ci :
Code:
    "command":"INSERT INTO YOUR_TABLE (col1, col2, col3) VALUES (!MySQLRow!)" ^

il faut bien que tu mette le nom de tes 62 colonnes à la place de col1, col2, col3 Mr. Green

Visiter le site web du posteur
Message Publicité 
PublicitéSupprimer les publicités ?


Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
OK pour ces précisions
je viens de faire un essai
la fenetre s'ouvre, l'invite en haut clignote
mais rien se passe,
au bout d'un moment la fenêtre se ferme

sur phpmyadmin la base ne se met pas à jour

où est le loup?



et voici le code
@echo off
setlocal EnableDelayedExpansion


set pathToCSV=c:\xnet_meteo\xnet_meteo.csv

call :getLastLineFile "%pathToCSV%" lastLine
echo;Last Line : !lastLine!,
call :csvRowToMySQLRow lastLine MySQLRow ";"
echo;Row converted : !MySQLRow!
echo;--------------
call :MySQL ^
{ ^
"path":"C:\wamp64\bin\mysql\mysql5.7.21\bin\mysql.exe" ^
"host":"127.0.0.1" ^
"user":"ardiger" ^
"password":"ra240250" ^
"database":"donnees_meteo" ^

Code:

        "command":"INSERT INTO donnees (Date;Time;Pressure_Absolute;Pressure_Relative;Temperature_Indoor;Humidity_Indoor;DewPoint_Indor;Temperature_Outdoor;Humidity_Outdoor;DewPoint_Outdor;Wind_Chill;Wind_Direction;Wind_Gust;Wind_Speed;Rainfall_Absolute;Rainfall_Relative;Rainfall_1h;Rainfall_24h;Cloud_Base;Humidex;SolarRadiations;UVIndex;Temperature_2;Humidity_2;Temperature_3;Humidity_3;Temperature_4;Humidity_4;Temperature_5;Humidity_5;Temperature_6;Humidity_6;Temperature_7;Humidity_7;Temperature_8;Humidity_8;Temperature_9;Humidity_9;Temperature_10;Humidity_10;DewPoint_2;DewPoint_3;DewPoint_4;DewPoint_5;DewPoint_6;DewPoint_7;DewPoint_8;DewPoint_9;DewPoint_10;Heatindex_0;Heatindex_1;Heatindex_2;Heatindex_3;Heatindex_4;Heatindex_5;Heatindex_6;Heatindex_7;Heatindex_8;Heatindex_9;Heatindex_10;weather;forecast
) VALUES (!MySQLRow!)" ^
    }




pause>nul&exit
:getLastLineFile <Path> <Output>
for /f "delims=" %%l in ('type "%~1"') do set %~2=%%~l
goto :eof
:MySQL <Object>
for %%p in (%*) do for /f "tokens=1,* delims=:" %%1 in ("%%~p") do (
set key=%%~1&set key=!key:"=!
if not "!key:{=}!"=="}" set "MySQL_!key!=%%~2"
)
"%MySQL_path%" -h%MySQL_host% -u%MySQL_user% -p%MySQL_password% -D%MySQL_database% -e "%MySQL_command%" >nul && echo;mysql: Command executed with Success^^!
goto :eof
:csvRowToMySQLRow <CSV_ROW> <OutPut_MySQL_ROW> <DELIMITER>
set rowcsv=!%~1!
set %~2='!rowcsv:%~3=','!'
goto :eof



exit



Dernière édition par ardigier le Ven 27 Avr 2018 - 23:11; édité 5 fois
Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Hello,

Juste un petit commentaire sur l'excellent code de Flammrock :


Personellement j'éviterais une itération sur tout le fichier pour récuperer la dernière ligne !
Si ton csv est énorme ça va coûter en performance.


je remplacerais donc :

Code:
 for /f "delims=" %%l in ('type "%~1"') do set %~2=%%~l


par

Code:

for /f "tokens=3 delims= " %%a in ('find /v /c "" "%~1"') do set /a number=%%a-1
for /f "skip=%number% delims=" %%a in ('type "%$fichier%"') do set %~2=%%~a "


Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
merci de ton observation

pour le moment le batch semble fonctionner mais avec un petit souci de redirection
en fait au lieu d'envoyer les lignes dans la base existante, il m'a créé une nouvelle base
Cette base contient une table et cette table n'a qu'une seule ligne avec 1 à 62 (le nombre de colonnes )
voir image




Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
ardigier a écrit:
merci de ton observation

pour le moment le batch semble fonctionner mais avec un petit souci de redirection
en fait au lieu d'envoyer les lignes dans la base existante, il m'a créé une nouvelle base
Cette base contient une table et cette table n'a qu'une seule ligne avec 1 à 62 (le nombre de colonnes )
voir image



Tu as mis des ; à la place des , dans ta commande sql
remplace ça :
Code:
"command":"INSERT INTO donnees (Date;Time;Pressure_Absolute;Pressure_Relative;Temperature_Indoor;Humidity_Indoor;DewPoint_Indor;Temperature_Outdoor;Humidity_Outdoor;DewPoint_Outdor;Wind_Chill;Wind_Direction;Wind_Gust;Wind_Speed;Rainfall_Absolute;Rainfall_Relative;Rainfall_1h;Rainfall_24h;Cloud_Base;Humidex;SolarRadiations;UVIndex;Temperature_2;Humidity_2;Temperature_3;Humidity_3;Temperature_4;Humidity_4;Temperature_5;Humidity_5;Temperature_6;Humidity_6;Temperature_7;Humidity_7;Temperature_8;Humidity_8;Temperature_9;Humidity_9;Temperature_10;Humidity_10;DewPoint_2;DewPoint_3;DewPoint_4;DewPoint_5;DewPoint_6;DewPoint_7;DewPoint_8;DewPoint_9;DewPoint_10;Heatindex_0;Heatindex_1;Heatindex_2;Heatindex_3;Heatindex_4;Heatindex_5;Heatindex_6;Heatindex_7;Heatindex_8;Heatindex_9;Heatindex_10;weather;forecast
) VALUES (!MySQLRow!)" ^

par ça :
Code:
"command":"INSERT INTO donnees (Date, Time, Pressure_Absolute, Pressure_Relative, Temperature_Indoor, Humidity_Indoor, DewPoint_Indor, Temperature_Outdoor, Humidity_Outdoor, DewPoint_Outdor, Wind_Chill, Wind_Direction, Wind_Gust, Wind_Speed, Rainfall_Absolute, Rainfall_Relative, Rainfall_1h, Rainfall_24h, Cloud_Base, Humidex, SolarRadiations, UVIndex, Temperature_2, Humidity_2, Temperature_3, Humidity_3, Temperature_4, Humidity_4, Temperature_5, Humidity_5, Temperature_6, Humidity_6, Temperature_7, Humidity_7, Temperature_8, Humidity_8, Temperature_9, Humidity_9, Temperature_10, Humidity_10, DewPoint_2, DewPoint_3, DewPoint_4, DewPoint_5, DewPoint_6, DewPoint_7, DewPoint_8, DewPoint_9, DewPoint_10, Heatindex_0, Heatindex_1, Heatindex_2, Heatindex_3, Heatindex_4, Heatindex_5, Heatindex_6, Heatindex_7, Heatindex_8, Heatindex_9, Heatindex_10, weather, forecast) VALUES (!MySQLRow!)" ^




p.s: encadre ton code par les balises hide et code comme ceci : https://pastebin.com/raw/7MrjrwQc




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
c'est fait resultat idem
rien dans donnees
autre souci si je veux supprimer la base créée, j'ai une erreur javascript, et pas de possibilité de suppression
je ne trouve rien sur ce probleme

je ne comprend pas ton ps sur les balise



Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Je pense que tu as tous les éléments pour rendre ton code fonctionnel !!!

Un peu de test et de recherche sur les commandes MYSQL devrait résoudre ton problème.

Il est difficile de débugger à distance avec si peu d'info.

Okay




______________________________________________________
AffPng.exe , StringBetween.exe , Hex2Png.exe
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Ok j'ai enfin capté le ps concernant hide et code
J'ai modifié la ligne commande comme indiqué , au lieu de ;
Nouveau test
Toujours pas de ligne ajoutée à ma base
Problème indépendant du batch, je ne peux pas supprimer la base créée suite à une erreur de JavaScript que je ne peux pas identifier car pas possible d'afficher le rapport



Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
sachadee a écrit:
Je pense que tu as tous les éléments pour rendre ton code fonctionnel !!!

Un peu de test et de recherche sur les commandes MYSQL devrait résoudre ton problème.

Il est difficile de débugger à distance avec si peu d'info.

Okay


Tout à fait d'accord, on a pas assez d'info
Le code fonctionne parfaitement chez moi, j'ai même reproduit ta base de données avec wamp64 et les données sont bien ajoutés.





Sinon pour supprimer la base données,
tu peux la supprimer manuellement en allant dans C:\wamp64\bin\mysql\mysql5.7.21\Data
Il suffit juste de supprimer le dossier portant le nom de la base de données.



ardigier a écrit:
Ok j'ai enfin capté le ps concernant hide et code

Nickel il reste plus qu'à mettre tout le code entre les balises Okay
Mais là c'est déjà bien, il n'y a plus la barre de défilement verticale Laughing

Edit :
Essai de reload wamp64




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
bon je crois que je vais laisser tomber,
je viens de recharger wamp
j'ai vérifié mon batch
je suis a l'identique de ton batch
je le lance

aucun affichage dans la fenêtre cmd comme tu as mis sur les photos
pas de rajout de ligne dans ma base

je dois être incompatible avec les bases de données

question: est il nécessaire d'avoir installé wamp 32 avant d'installer wamp 64 ?
question : est ce que batch doit être dans un répertoire spécifique , pour l'instant il est sur mon bureau

aussi de quelles infos aurais tu besoin pour comprendre pourquoi cela ne fonctionne pas chez moi


EDIT
j'ai passé @echo sur on
cela m'a permi de voir que le batch lit bien le fichier csv
mais alors que la lecture est en cours, la fenetre se referme
donc le reste des commandes ne peut pas s'exécuter

est ce un probleme de fichier trop gros
ou de limite de temps
si besoin, je peux mettre mon fichier en RAR joint

je vais essayer la proposition de sachadee

bon avec les 2 lignes pour for
la fenêtre se referme immédiatement

NB je suis passé de phpmyadmin 4.7.9 à 4.8.0.1
plus de pb avec javascript

EDIT je continue mes tests
sur le bat modifié selon sachadee
voila la ligne qui semble poser probleme




Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
je continue mes tests
j'ai créé une nouvelle table "donnees2"
j'ai pris un bout de fichier csv de 500 lignes nommé test.csv
j'ai mis ces info dans le batch
il semble fonctionner jusqu’à la fin
mais il signale 2 erreurs


si vous avez une idée



Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
CA Y EST !!!!!!!!!!!!!!!!!!!!!!!
enfin ca marche avec le batch de Flammrock
par contre la modif proposée par sachadee crée une erreur de chemin , mentionnée plus haut

encore merci pour votre contribution

PS : l'erreur était sur la ligne command
à l'origine cette ligne était divisée en 2 lignes
en supprimant ce retour ligne, la commande s'effectue correctement

deniére question
pourquoi on demande le MDP à la fin
peut on le supprimer?




Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
ardigier a écrit:
CA Y EST !!!!!!!!!!!!!!!!!!!!!!!
enfin ca marche avec le batch de Flammrock
par contre la modif proposée par sachadee crée une erreur de chemin , mentionnée plus haut

encore merci pour votre contribution

PS : l'erreur était sur la ligne command
à l'origine cette ligne était divisée en 2 lignes
en supprimant ce retour ligne, la commande s'effectue correctement

deniére question
pourquoi on demande le MDP à la fin
peut on le supprimer?


Nickel Mr. Green

Le programme demande le mot de passe si le mot de passe est vide car le commutateur -p est présent suivit d'une chaîne vide. (de rien en fait)
Pour résumer, on dit à MySQL qu'il y a un mot de passe mais on ne dit pas quel est le mot de passe.

Donc voici le script corrigé Okay

Code:
@echo off
setlocal EnableDelayedExpansion


set pathToCSV=c:\xnet_meteo\xnet_meteo.csv

call :getLastLineFile "%pathToCSV%" lastLine
echo;Last Line : !lastLine!
call :csvRowToMySQLRow lastLine MySQLRow ";"
echo;Row converted : !MySQLRow!
echo;--------------
call :MySQL ^
{ ^
    "path":"C:\wamp64\bin\mysql\mysql5.7.21\bin\mysql.exe" ^
    "host":"127.0.0.1" ^
    "user":"root" ^
    "password":"" ^
    "database":"donnees_meteo" ^
    "command":"INSERT INTO donnees2 (Date, Time, Pressure_Absolute, Pressure_Relative, Temperature_Indoor, Humidity_Indoor, DewPoint_Indor, Temperature_Outdoor, Humidity_Outdoor, DewPoint_Outdor, Wind_Chill, Wind_Direction, Wind_Gust, Wind_Speed, Rainfall_Absolute, Rainfall_Relative, Rainfall_1h, Rainfall_24h, Cloud_Base, Humidex, SolarRadiations, UVIndex, Temperature_2, Humidity_2, Temperature_3, Humidity_3, Temperature_4, Humidity_4, Temperature_5, Humidity_5, Temperature_6, Humidity_6, Temperature_7, Humidity_7, Temperature_8, Humidity_8, Temperature_9, Humidity_9, Temperature_10, Humidity_10, DewPoint_2, DewPoint_3, DewPoint_4, DewPoint_5, DewPoint_6, DewPoint_7, DewPoint_8, DewPoint_9, DewPoint_10, Heatindex_0, Heatindex_1, Heatindex_2, Heatindex_3, Heatindex_4, Heatindex_5, Heatindex_6, Heatindex_7, Heatindex_8, Heatindex_9, Heatindex_10, weather, forecast) VALUES (!MySQLRow!)" ^
}



pause>nul&exit
:getLastLineFile <Path> <Output>
  for /f "tokens=3 delims= " %%1 in ('find /v /c "" "%~1"') do (
    <%1 (for /l %%A in (0 1 %%1) do (set "%~2=" & set /p "%~2="))
  )
goto :eof
:MySQL <Object>
  for %%p in (%*) do for /f "tokens=1,* delims=:" %%1 in ("%%~p") do (
    set key=%%~1&set key=!key:"=!
    if not "!key:{=}!"=="}" set "MySQL_!key!=%%~2"
  )
  set MySQL_pwd=
  if not "%MySQL_password%"=="" set "MySQL_pwd= -p%MySQL_password%"
  "%MySQL_path%" -h%MySQL_host% -u%MySQL_user%%MySQL_pwd% -D%MySQL_database% -e "%MySQL_command%" >nul && echo;mysql: Command executed with Success^^!
goto :eof
:csvRowToMySQLRow <CSV_ROW> <OutPut_MySQL_ROW> <DELIMITER>
  set rowcsv=!%~1!
  set %~2='!rowcsv:%~3=','!'
goto :eof





______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Merci pour ta réponse,
Donc si je crée un nouvel utilisateur au lieu de root, et que je lui affecte un mdp alors en renseignant les lignes du batch correspondantes
Cela devrait aussi marcher?

Tu écrit mysql_pwd =
Est ce que cela signifie que je dois renseigner après = ou pas ?



Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
ardigier a écrit:
Merci pour ta réponse,
Donc si je crée un nouvel utilisateur au lieu de root, et que je lui affecte un mdp alors en renseignant les lignes du batch correspondantes
Cela devrait aussi marcher?

Tu écrit mysql_pwd =
Est ce que cela signifie que je dois renseigner après = ou pas ?


Nan tu dois laisser cette variable vide, tu dois juste renseigner le mot de passe à la ligne prévu à cette effet Okay




______________________________________________________
la vie est trop courte pour retirer le périphérique USB en toute sécurité...
Si la statue de la liberté lève le bras depuis 125 ans, c'est parce qu'elle cherche du réseau sur son Blackberry Torches...
Grâce à mon nouveau correcteur automatiste sur mon téléphage, je ne fais plus aucune faute d'orthodontie.
Quelqu'un a t il déjà demandé au drapeau japonais ce qu'il enregistre depuis tout ce temps ?
Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
OK
ca marche nickel
dernière amélioration
lorsque je lance le bat
la fenêtre reste ouverte à la dernière action
comment demander à cette fenêtre de se refermer

EDIT C'est BON j'ai mis un exit après "command executed with succes" et ca me ferme la fenêtre

encore merci pour ta patience et ta réactivité






Visiter le site web du posteur
Répondre en citant
Message [R] batch de mise à jour d'une BDD à partir d'un csv 
Le batch de flammrock marchant très bien, j'ai essayé la modif proposée par sachadee,
La deuxième ligne génère une erreur sur le chemin spécifié
C'est dommage car effectivement comme l'a suggéré sachadee cette méthode semble plus rapide dans son exécution
Si vous pouviez voir oú se situe l'anomalie ,cela serait top
Et encore un grand merci à tous les deux pour votre aide



Visiter le site web du posteur
Message [R] batch de mise à jour d'une BDD à partir d'un csv 


Montrer les messages depuis:
Répondre au sujet Page 2 sur 3
Aller à la page: <  1, 2, 3  >
  



Index | créer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Copyright 2008 - 2016 // Batch