TXT Datei Zeile für Zeile in MySQL

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Hallo zusammen,

ich möchte ein Script schreiben, was eine .txt Datei Zeile für Zeile ausliest, und den Inhalt in eine MySQL Datenbank updaten.

Datenbank hat die Columns id und name

Ich möchte das der erste Eintrag der txt datei in der id=1 geupdated wird, der zweite eintrag bei der id2 usw...

In der txt Datei steht aktuell:

Zeile1
Zeile2
Zeile3
usw...

Dafür habe ich das folgende Script gebastelt

Code: Alles auswählen

file = open("name.txt","r")

id = 1
for lines in file.readlines():
 while id < 15:
  sql = "UPDATE league SET name =%s WHERE id=%s"
  cur.execute(sql,(lines,id))
  conn.commit()
  id = id +1
Allerdings kommt am Ende nur raus, das der Wert Zeile1 in allen IDs steht....
Ich komme aktuell nicht auf den Fehler :(

Danke für eure Hilfe!
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

@Furbynat0r: genau das sagst Du ja mit Deinem Skript: fülle die ersten 15 IDs mit der ersten Zeile der Datei. Welchen Sinn hat Deiner Meinung nach die while-Schleife?
Furbynat0r
User
Beiträge: 17
Registriert: Dienstag 27. Februar 2018, 09:43

Heilige Kacke.... nach genauerem Betrachen habe ich mich das auch gefragt.....

While Schleife entfernt und schon macht er was ich will...

Wohl vor Lauter Bäumen den Wald nicht gesehen.....

Danke :)
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Zum Code: Eingerückt wird immer mit 4 Leerzeichen pro Ebene. Dateien öffnet man am besten mit dem with-Statement. Man iteriert direkt über das Fileobjekt, statt readlines zu benutzen. »lines« ist der falsche Name für EINE Zeile. Wenn man zusätzlich noch einen Index braucht nimmt man »enumerate«. Wahrscheinlich willst Du auch noch das Zeileende-Zeichen von jeder Zeile entfernen:

Code: Alles auswählen

with open("name.txt") as lines:
    for id, line in enumerate(lines, 1):
        sql = "UPDATE league SET name=%s WHERE id=%s"
        cur.execute(sql, (line.strip(), id))
conn.commit()
Antworten