CSV Datein importieren
marek
- datenbank
0 Blubb
Hallo zusammen,
per linux Script möchte ich eine csv Datei in die MySQL Datenbank importiereren.
#!/bin/bash
# Script: script1.sh
clear
echo "=====================================-"
echo " GeoIp MySQL Database Easy Installer. "
echo "======================================"
echo ""
stty -echo
read -p "MySQL root password: " mysql_pass; echo
stty echo
database=mydb
tabelle=mytab_city_location
csvDatei=test1.csv
sqlDatei=test1.sql
echo "
USE $database;
DROP TABLE IF EXISTS $tabelle;
CREATE TABLE $tabelle (
locid INT UNSIGNED NOT NULL,
country CHAR(4) NOT NULL,
region CHAR(4) NOT NULL,
city VARCHAR(50) NOT NULL,
postalCode INT NULL,
latitude FLOAT NULL,
llongitude FLOAT NULL,
metroCode INT NULL,
areaCode INT NULL
);
LOAD DATA LOCAL INFILE '$csvDatei'
INTO TABLE $database.$tabelle
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(locid, country, region, city, postalCode, latitude, llongitude, metroCode, areaCode);
" > $sqlDatei
mysql -u root --password=$mysql_pass $database < $sqlDatei
echo "Daten wurden in die $database.$tabelle geschrieben"
echo ""
Bis zu diesem Code geht es ganz gut aber dann, beim Import der Daten sind in drei Spalten überflüssige doppelte Anführungszeichen, die möchte ich loss werden.
Mein erster Versuch war:
LOAD DATA LOCAL INFILE '$csvDatei'
INTO TABLE $database.$tabelle
FIELDS TERMINATED BY ','
ENCLOSED BY '"' # wurde hinzu gefügt.
LINES TERMINATED BY '\n'
ohne Erfolg.
Der zweite Versuch sollt dann über die mysql Anweisung statt finden, sieht folgender Maßen aus:
echo ""
mysql -u root --password=$mysql_pass ;
UPDATE $database.$tabelle SET country=REPLACE(country, "\"", ""), region=REPLACE(country, "\"", ""), city=REPLACE(city, "\"", "");
echo "Updage der Felder country, region, city"
echo ""
echo "ALTER TABLE $database.$tabelle MODIFY CHANGE country CHAR(2);"
echo "ALTER TABLE $database.$tabelle MODIFY CHANGE region CHAR(2);"
Die update Anweisung wurde nicht mehr ausgeführt :-(
Jetzt stecke ich fest, kann jemand ein Blick werfen und mir ein Tipp geben.
Danke im Vorraus.
Grüße
marek
Hallo,
mysql -u root --password=$mysql_pass ;
Nach dieser Anweisung "hängt" ein Skript im MySQL Interpreter ... und wartet und wartet.
Die Option -e (-e, --execute=name Execute command and quit. (Output like with --batch).) könnte dir helfen.
Grüße