2009-08-05 3 views
0

Ich habe angefangen, SQL in den letzten paar Tagen zu lernen, bin aber stecken geblieben beim Versuch, meine Daten in die Tabelle zu bekommen.MySQL LOAD DATA - Laden einer Textdatei mit ColumnName = Wertformat

Die Daten in einer Textdatei gespeichert ist mit dem Format:

ColumnName1=SomeInteger 
ColumnName2=SomeInteger 
ColumnName3=SomeString 
... etc 

Bisher habe ich es geschafft, eine Tabelle zu erstellen (die etwa 150 Spalten hat, dass ich hoffe, separat aufzuspalten und Gruppen sobald ich mehr weiß) durch das Strippen der =SomeValue in Python. Anschließend werden die Spaltennamen mit CREATE TABLE in einer Tabelle umbrochen. Ein bisschen chaotisch, aber es funktioniert für jetzt.

Jetzt bin ich fest an folgenden Stelle:

LOAD DATA INFILE 'path/to/file.txt' 
INTO TABLE tableName 
COLUMNS TERMINATED BY '\n' 
LINES STARTING BY '='; 

Ich versuche, SQL zu bekommen, die Daten in die Spaltennamen angegeben einzufügen (incase sie nicht immer in der gleichen Reihenfolge sind), Ignoriere das Gleichheitszeichen und verwende den eindeutigen Dateinamen als meinen Index. Ich habe auch versucht, das Gleichheitszeichen mit '\=' zu entkommen, weil die MySQL-Dokumentation erwähnt, dass alles vor dem Parameter LINES STARTING BY ignoriert werden sollte. Die Eingabe LINES STARTING BY 'ColumnName1=' schafft es, die erste Instanz zu ignorieren, aber es ist nicht genau das, was ich will, und funktioniert nicht für die restlichen Zeilen.

Ich bin nicht abgeneigt, mehr Dokumentation oder Tutorials zu lesen, wenn mir jemand in die richtige Richtung zeigen könnte.

bearbeiten: Zeilen sind wie folgt abgegrenzt: Ich habe etwa 100.000 INI-Dateien gegeben. Jede davon hat den Namen FirstName_LastName.ini (Eindeutigkeit ist garantiert) und jede Datenzeile ist in den INI-Dateien enthalten. Ich muss die archaische Methode der Kontospeicherung ins 21. Jahrhundert bringen. Es wird gemunkelt, dass MySQL LOAD DATA für diese Art von Aufgabe besonders schnell ist, weshalb ich begann, es als eine Option zu betrachten. Ich habe mich nur gefragt, ob es möglich ist, es zu manipulieren, um mit Daten in meinem Format zu arbeiten, oder wenn es besser ist, alle 100k-Dateien durch einen Parser zu übertragen. Ich bin immer noch offen für Vorschläge, die SQL verwenden, wenn es Zauberkünstler gibt, die das lesen.

ps: Wenn jemand bessere Ideen hat, wie ich meine Daten (aus diesem Textformat) in einzelne Tabellen bekommen kann, würde ich sie auch gerne hören.

+0

Ich bin nicht sicher, ich verstehe, was die Quelldatei aussieht ... Sie haben eine Datei, die einen Spalte-Namen und den Wert pro Zeile hat? Wie grenzt man Zeilen ab? Um ehrlich zu sein, würde ich mich darauf konzentrieren, die Datei auf das Format 'LOAD DATA INFILE' zu warten - nämlich eine Zeile pro Einfügereihe, alle mit einer konsistenten Spaltenreihenfolge. – stran

Antwort

0

Persönlich würde ich wahrscheinlich die ganze Sache in Python tun, mit dem MySQLdb-Modul (wahrscheinlich in einem Paket namens etwas wie python-mysqldb oder MySQL-Python in Ihrer Lieblings-Distribution). Formatiere deine Daten in einer Liste von Tupeln und füge sie dann ein. Beispiel aus http://mysql-python.sourceforge.net/MySQLdb.html:

import MySQLdb 

datalist = [("Spam and Sausage Lover's Plate", 5, 1, 8, 7.95), 
      ("Not So Much Spam Plate", 3, 2, 0, 3.95), 
      ("Don't Wany ANY SPAM! Plate", 0, 4, 3, 5.95)] 

db = MySQLdb.connect(user='dude', passwd='foo', db='mydatabase') 
c = db.cursor() 

c.executemany(
    """INSERT INTO breakfast (name, spam, eggs, sausage, price) 
    VALUES (%s, %s, %s, %s, %s)""", 
    datalist) 
Verwandte Themen