Salut lefi0528.
Le minimum à faire est de réadapter mon code à vos besoin.
C'est un script batch windows qui permet de lancer la commande "mysqlimport". La ligne suivante :
set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
est pour indiquer où se trouve le répertoire bin de mysql. Comme j'ai plusieurs MySql sur mon ordinateur, je précise le chemin vers l'un d'eux.
Admettons que vous avez installé votre WampServer sur une machine windows, dans le répertoire "C:\Wamp".
De plus, vous utilisez la version MySql 5.6.28. La commande path s'écrit comme ci-après :
set PATH=.;C:\Wamp\bin\mysql\mysql5.6.28\bin\;%PATH%
500 fichiers, cela signifie 500 tables ? C'est pas un peu beaucoup ?
Pour résoudre votre problème, vous devez charger vos tables dans un ordre prédéfini à l'avance.
Soit la table t1 et la table t2. Il y a une clef étrangère dans la table t2 qui pointe vers la table t1.
Et bien, vous devez d'abord charger la table t1 avant la table t2. Pourquoi ?
Car la clef étrangère indique que vous avez un contrôle d'intégrité dans la table qui spécifie sur la colonne, la clef étrangère.
Si votre table t1 est "client" et table t2 est "facture", vous devez charger en premier la table t1 "client" avant la table t2 "facture".
Il se peut que vous fassiez les choses correctement, mais il se peut aussi que votre table t1 "client" ne contienne pas les identifiants qui sont en clef étrangère dans la table t2 "facture".
Autrement dit, vous avez un problème d'intégrité avec cette clef étrangère.
Soit vous n'avez pas le bon fichier '.csv' "client", soit la table t1 "client" est vide.
Quand on ne sait pas prendre le problème, on commence par faire un exercice basique. Ensuite, on va complexifier l'exercice pour arriver à résoudre le problème.
Tu as un fichier de type "text", dont le préfixe est ".csv".
1) il faut vérifier que tu utilises le bon jeu de caractères.
Ceci est fréquement source de problèmes pour un chargement.
Vérifier que ta table MySql est bien en "utf8". Dans l'exemple que je te donne (un peu plus loin), j'utilise "latin1".
Ce qui implique que tes fichier '.csv' sont aussi dans ce même jeu de caractères.
2) en jettant un coup d'oeil dans le fichier, il faut s'assurer qu'il est correctement formaté.
a) les chaines de caractères sont entre guillemets (").
b) les nombres ne sont pas encadrés pas des guillemets.
c) chaque champs de ton fichier ".csv" est séparé par une virgule (,).
d) comme tu es sous windows, la marque de fin de la ligne est codifié "/r/n".
--> "/r" signifie "carriage return" ou en français retour charriot.
--> "/n" signifie "new line" ou nouvelle ligne.
e) en espérant que tu n'as pas de caractères spéciaux, il faut savoir qu'ils sont préfixés par un anti-slash (\).
3) il se peut aussi que dans ton fichier '.csv', il y a des entêtes à ne pas charger. Et bien, il faut les ignorer charger.
4) définir entre parenthèse () les champs que vous allez charger dans votre table.
Il se peut que vous soyez obliger de faire un petit traitement, comme par exemple supprimer les blancs avant et après de la chaîne.
Ou encore reformater les dates pour quelles soient compréhensible par MySql.
Voici un script MySql qui charge une toute petite table. En fait, c'est un exercice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132
| --------------
SET AUTOCOMMIT = 0
--------------
--------------
START TRANSACTION
--------------
--------------
DROP DATABASE IF EXISTS `base`
--------------
--------------
CREATE DATABASE IF NOT EXISTS `base`
DEFAULT CHARACTER SET `latin1`
DEFAULT COLLATE `latin1_general_ci`
--------------
--------------
DROP TABLE IF EXISTS Cities
--------------
--------------
CREATE TABLE Cities (
Country CHAR(2),
City CHAR(22),
AccentCity CHAR(3),
Region CHAR(2),
Population INT UNSIGNED NULL DEFAULT NULL,
Latitude FLOAT,
Longitude FLOAT,
Date DATETIME
) ENGINE=InnoDB
DEFAULT CHARSET=`latin1` COLLATE=`latin1_general_ci`
ROW_FORMAT=COMPRESSED
--------------
--------------
TRUNCATE Cities
--------------
--------------
set unique_checks = 0
--------------
--------------
set foreign_key_checks = 0
--------------
--------------
set sql_log_bin = 0
--------------
--------------
alter table Cities DISABLE KEYS
--------------
--------------
commit
--------------
--------------
LOAD DATA LOCAL INFILE 'fichier.txt'
INTO TABLE `Cities`
CHARACTER SET latin1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
ESCAPED BY '\\' LINES
TERMINATED BY '\r\n'
IGNORE 0 LINES
(@F1, @F2, @F3, @F4, Population, Latitude, Longitude, @F8)
set Country = trim(@F1),
City = trim(@F2),
AccentCity = trim(@F3),
Region = trim(@F4),
Date = outils.chgdate(@F8)
--------------
--------------
commit
--------------
--------------
alter table Cities ENABLE KEYS
--------------
--------------
set unique_checks = 1
--------------
--------------
set foreign_key_checks = 1
--------------
--------------
set sql_log_bin = 1
--------------
--------------
commit
--------------
--------------
select concat('>', Country, '<') as 'Country',
concat('>', City, '<') as 'City',
concat('>', AccentCity,'<') as 'AccentCity',
concat('>', Region, '<') as 'Region',
concat('>', Population,'<') as 'Population',
concat('>', Latitude, '<') as 'Latitude',
concat('>', Longitude, '<') as 'Longitude',
concat('>', date, '<') as 'Date'
from `Cities`
--------------
+---------+-----------------------+------------+--------+------------+----------+-----------+-----------------------+
| Country | City | AccentCity | Region | Population | Latitude | Longitude | Date |
+---------+-----------------------+------------+--------+------------+----------+-----------+-----------------------+
| >fr< | >dijon bourgogne< | >---< | >bo< | >500000< | >200< | >150< | >2015-12-10 15:20:00< |
| >fr< | >paris ile de france< | >---< | >il< | >2000000< | >100< | >50< | >2015-06-15 07:15:00< |
| >fr< | >nice paca< | >---< | >pa< | >100000< | >250< | >75< | >2015-07-25 19:58:00< |
| >fr< | >paca< | >---< | >pa< | >100000< | >250< | >75< | >2015-07-25 19:58:00< |
+---------+-----------------------+------------+--------+------------+----------+-----------+-----------------------+
--------------
COMMIT
--------------
--------------
SET AUTOCOMMIT = 0
--------------
Appuyez sur une touche pour continuer... |
Et voici le fichier à charger :
1 2 3 4
| "fr","dijon bourgogne","---","bo",500000,200,150,"10/12/2015 15:20"
"fr","paris ile de france","---","il",2000000,100,50,"15/06/2015 07:15"
"fr","nice paca","---","pa",100000,250,75,"25/07/2015 19:58"
"fr","paca","---","pa",100000,250,75,"25/07/2015 19:58" |
Et pout terminer, mon batch windows qui permet de lancer ce script MySql :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| @echo off
setlocal enableDelayedExpansion
chcp 1252 > nul
set PATH=.;%WAMPSERVER%\bin\mysql\%MYSQL%\bin\;%PATH%
SET FIC=%~nx0
SET FIC=%FIC:bat=sql%
mysql < %FIC% --verbose --force
@echo.
pause
exit |
L'exemple avec l'utilitaire MySqlImport ne vous sert à rien, car comme je le suppose, vous ne devez pas charger toutes les colonnes.
Et pire, vous avez sûrement un formatage à faire sur ces colonnes.
Inspirez vous de mon exemple. Commencez par un petit jeu d'essai afin de comprendre comment procéder.
Si vous avez des questions, n'hésitez pas, je reste à votre disposition !
@+
Partager