2008-09-16 5 views

Antwort

3

Wenn die Daten, die Sie zu importieren versuchen, in einem vernünftigen Format ist - durch Komma getrennte, zum Beispiel - und Datenbankserver hat vernünftige Dienstprogramme Kommandozeile, sollte dies kein Problem sein. MySQL hat das „mysqlimport“ Kommandozeilen-Tool, das das Format der Datei verschiedene Argumente akzeptieren beschreiben:

mysqlimport \ 
    --fields-terminated-by=, \ 
    --ignore-lines=1 \ 
    --fields-optionally-enclosed-by='"' < datafile.txt 

die Daten durch perl Passing/sed/awk Einzeiler mit bekommt es im richtigen Format helfen , und das Shell-Skript kann problemlos die Eingabeaufforderung für Dateinamen, die Behandlung von Argumenten usw. verarbeiten.

Die Verwendung der verschiedenen Befehlszeilen-Tools von Unix ist die ganze Sache des Bash-Skripts. Perl, MySQL usw. sind alle Teil dieses Toolkits.

0

Kann es nicht richtig testet jetzt, aber so etwas wie:

echo "INSERT INTO foo (b,a,r) VALUES (1,2,3);" | 
    mysql -u user -psecret -h host database 

in einem Shell-Skript funktionieren soll. Ich weiß nicht, wie man Daten daraus bekommt

2

es ist möglich: Mit Ihrem Unix-Shell-Skript, erzeugen Sie ein SQL-Skript und verwenden Sie den CLI zur Datenbank, um das SQL-Skript auszuführen.

Wenn die Menge an Informationen klein genug ist, könnten Sie das SQL im Speicher aufbauen, ich rate jedoch davon ab, da Sie nie wissen, was die Zukunft bringt (und es könnte sehr große Datenmenge sein). Die Verwendung eines Anrufs pro Anfrage ermöglicht es Ihnen nicht, von Bulk-Operationen zu profitieren, die manchmal verfügbar sind.

2

können Sie, aber es könnte ein bisschen hässlich, zum Beispiel, wenn Sie MySQL verwenden und nehmen wir an Sie eine SQL-Zeichenfolge in $ sql gespeichert haben

echo $sql | mysql -u[user] -p[password] -h[host] 

P. S. es könnte eine gute Idee sein, uns zu sagen, welche Datenbank Sie verwenden, damit wir mehr spezifische Hilfe anbieten: p

edit: die Beispielzeile geändert, so dass es tatsächlich funktioniert

-2

Shell Scripting (Bash oder ähnliches) primäre Absicht ist es nicht, mit Datenbanken umzugehen. Gehen Sie für Java oder noch besser, nutzen Sie diese Gelegenheit, um die Grundlagen einer Skriptsprache wie Python oder Ruby zu erlernen.

+0

Unix-Shell ist eine Skriptsprache, und Sie haben nicht immer den Luxus, eine bessere Skriptsprache zur Verfügung zu haben. Java wird nicht so einfach sein und wahrscheinlich nicht so schnell (woohoo Kommentare funktionieren jetzt in IE6) – Jean

1

Pipe ist dein Freund.

Zum Beispiel in MySQL:

echo 'load data infile /path/to/the/file into table table_name ...' | 
    mysql -u mysql_user_id -p 

sollte die Arbeit machen.

Vorausgesetzt, Ihre Datei ist irgendwie strukturiert, z. Komma/Tab getrennt usw.

Einzelheiten das Handbuch für die Datenbank überprüfen.

+0

Formatierungstipp: ein Absatz, wo alle Zeilen beginnen mit mindestens 3 Leerzeichen wird als "Code" formatiert werden. Ich schlage vor, dies mit Ihrem Beispiel zu tun, damit es besser herausragt; Das ist eine gute Antwort! –

2

Natürlich kann man, vorausgesetzt, dass Sie eine Befehlszeile SQL-Client praktisch haben! Ich habe es mit Sybase und dem isql-Kommandozeilen-Client gemacht. Sie können sogar clever sein und Dinge durch awk schicken und Skripte senden, um Befehle im laufenden Betrieb zu generieren. Es ist vielleicht nicht der effizienteste Weg, um alles zu tun, aber es gibt viele Möglichkeiten, dein Unix-Hacker-Mojo zu verändern.

0

Es hängt von Ihrem Datenbankverwaltungssystem ab. Die meisten von ihnen haben leistungsfähige Shell-Tools zum Importieren von Daten, sogar einige ETL-Funktionen. Diese Tools könnten sogar sehr performant sein, wenn sie das Massenladen unterstützen - normalerweise kann Java JDBC das nicht so einfach tun.

Verwandte Themen