bin ziemlich ratlos. Habe ein Skript, welches auch schon funktionierte. Leider musste ich hinterher noch Änderung an der Datenbank vornehmen, Spalten Hinzufügen und und Inhalt der Spalten ist ein wenig anders. Meine ID Spalten sind nun CHAR und keine INT mehr, aber alles egal. Hab ich auch geändert und erstelle nun die Datenbank (ist eh alles noch in der Testphase) neu. Wollte dmait nur sagen, dass das Skript schon funktionierte.
Die Inhalte der Tabellen der Datenbank (zumindest ein Teil) liegt in Form von CSVs vor und die müssen NUR eingelesen werden. Für 2 Tabellen funktioniert das auch, für die 3. nicht. Kommt oben genannte Fehlermeldung.
Ich hab mir alles genau angeschaut, weil diese Fehlermeldung hatte ich davor auch schon mal, da endete jede Zeile in der csv mit dem Trennzeichen. Hatte es weggenommen und hatte danach dann keine Probleme mehr.
Hier die Ausschnitte aus dem Code:
Erstellen der Tabelle (funktioniert)
Code: Alles auswählen
indizes = 'create table IF NOT EXISTS Indikatoren (ID CHAR(5) PRIMARY KEY,\
kat CHAR(2),\
CALC_CAT CHAR(2),\
NAME VARCHAR(250),\
Berechnung VARCHAR(250),\
Einheit Varchar(6),\
FOREIGN KEY(kat) REFERENCES \
Kategorien(KAT) \
ON DELETE CASCADE)\
ENGINE = InnoDB'
cursor.execute(indizes)
Code: Alles auswählen
def fill_tables(f, fill):
reader_csv = csv.reader(f, delimiter=';')
fill[1](reader_csv)
def indicators(reader_csv):
try:
cursor.executemany('INSERT INTO Indikatoren(\
ID,kat,CALC_CAT,NAME,Berechnung,Einheit)\
values(%s,%s,%s,%s,%s)',
reader_csv)
db.commit()
except MySQLdb.IntegrityError:
print "Eintrag gibt es schon"
#----------------
f = file(csv_file)
fill_tables(f,fill)
Code: Alles auswählen
['X1Y', 'Z', 'X', 'Flache in ha', 'Flache 1234', 'ha']
