Salut tout le monde,
Je viens auprès de vous prendre un peu d’aide sur un script qui me fait buter
J’ai fait un script qui me permet à partir de fichier CSV de remplir ma base de donnée MYSQL, car j’ai clairement pas envie de faire ça à la manouche.
Je vous mets ci-dessous le code PS: Il n'est pas encore factorisé
#!/usr/bin/env bash
## Permet de stopper en cas d'erreur
set -e
## DEBUG
set -x
## Declaration des variables
tmpfile=$(mktemp)
source_file="/awk_bdd/importbdd"
MYSQL_USER="geoffrey"
MYSQL_BDD="BDDMYSQL"
MYSQL_TABLE="$1"
COLUMN1="$2"
COLUMN2="$3"
COLUMN3="$4"
COLUMN4="$5"
EMPTY_TABLE="DELETE from $MYSQL_TABLE;"
### Declare fonctions
function awk_func(){
awk -F',' 'BEGIN{OFS=";"} NR > 1{gsub("\"","");print $1, $2, $4}' $source_file > $tmpfile
}
awk_func
ARG=$#
ARG=$((ARG - 1))
ARGS=("$@")
if (( $ARG <= 0 ));then
echo "USAGE : $0 Nom_du tableau Nom_colonne1 Nom_colonne2 ...."
exit
fi
## Declare les arrays
## Ingredients nom
declare -a array
while read -r line
do array+=("$line")
done < <(awk -F';' '{print $1}' $tmpfile)
## Ingredients marque
declare -a array2
while read -r line
do array2+=("$line")
done < <(awk -F';' '{print $3}' $tmpfile)
##Ingredients categorie
declare -a array3
while read -r line
do array3+=("$line")
done < <(awk -F';' '{print $2}' $tmpfile)
## Quatrieme colonne pour test
declare -a array4
while read -r line
do array4+=("$line")
done < <(awk -F';' '{print $4}' $tmpfile)
function query_insert(){
if (($ARG == 1));then
query="INSERT INTO $MYSQL_TABLE ($COLUMN1) VALUES ('${array[$insert]}');"
export query
elif (($ARG == 2));then
query="INSERT INTO '$MYSQL_TABLE' ('$COLUMN1','$COLUMN2') VALUES ('${array[$insert]}','${array2[$insert]}');"
export query
elif (($ARG == 3));then
query='INSERT INTO '$MYSQL_TABLE' ('$COLUMN1','$COLUMN2','$COLUMN3') VALUES ('${array[$insert]}','${array2[$insert]}','${array3[$insert]}');'
export query
elif (($ARG == 4));then
query="INSERT INTO '$MYSQL_TABLE' ('$COLUMN1','$COLUMN2','$COLUMN3','$COLUMN4') VALUES ('${array[$insert]}','${array2[$insert]}','${array3[$insert]}','${array4[$insert]}');"
export query
fi
}
query_insert
function looping(){
sudo mysql -u $MYSQL_USER -D $MYSQL_BDD -e "$EMPTY_TABLE" && echo "Purge ... success"
for ((insert=0;insert<${#array[@]};insert++))
do
sudo mysql -u $MYSQL_USER -D $MYSQL_BDD -e "$query"
done
}
looping
Le souci est que qu’il me dit à chaque fois que l’entrée existe déjà à la première insertion
hors qu’au début de la boucle je vide bien la table pour être sur
Je comprend pas pourquoi il y a déjà une entrée et de ce fait il bloque l’éxécution
ci-dessous le debug de ce qui merde
+ query='INSERT INTO ingredients (ingredients_nom) VALUES ('\''Batônnet d’amande'\'');'
+ export query
+ looping
+ sudo mysql -u geoffrey -D trouvetarecette -e 'DELETE from ingredients;'
Password:
+ echo 'Purge ... success'
Purge ... success
+ (( insert=0 ))
+ (( insert<183 ))
+ sudo mysql -u geoffrey -D trouvetarecette -e 'INSERT INTO ingredients (ingredients_nom) VALUES ('\''Batônnet d’amande'\'');'
+ (( insert++ ))
+ (( insert<183 ))
+ sudo mysql -u geoffrey -D trouvetarecette -e 'INSERT INTO ingredients (ingredients_nom) VALUES ('\''Batônnet d’amande'\'');'
ERROR 1062 (23000) at line 1: Duplicate entry 'Batônnet d’amande' for key 'ingredients_nom'
Merci