Seite 1 von 1

TXT Datei Zeile für Zeile in MySQL

Verfasst: Donnerstag 29. März 2018, 13:50
von Furbynat0r
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!

Re: TXT Datei Zeile für Zeile in MySQL

Verfasst: Donnerstag 29. März 2018, 13:54
von Sirius3
@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?

Re: TXT Datei Zeile für Zeile in MySQL

Verfasst: Donnerstag 29. März 2018, 14:03
von Furbynat0r
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 :)

Re: TXT Datei Zeile für Zeile in MySQL

Verfasst: Donnerstag 29. März 2018, 17:34
von Sirius3
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()