SQLAlchemy StaleDataError. Session.flush() gute Idee?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
Antworten
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Hi, ich habe ein Problem bei SQLAlchemy. Ich lese Daten aus einer XML Datei in eine Datenbank.

Code: Alles auswählen

def import_tags_from_xml():
    f = app.open_resource('model/data/tags.xml')
    for child in etree.parse(f).getroot():
        attr = Tag(**child.attrib)
        session.add(attr)
    session.commit()
    f.close()
Das ganze läuft mit Flask auf dem Python Webserver. Ich rufe die Funktion auf und die Daten werden korrekt eingelesen. Anschließend kann ich die Webseite auch korrekt nutzen. Wenn ich die Funktion erneut aufrufe kommt es zu besagtem StaleDataError. Ich habe zwar in etwa verstanden, was die Ursache ist. Die Daten, die in der Datenbank stehen stimmen mit denen im Speicher nicht mehr überein. Das Problem ist, dass zu dem Zeitpunkt keine Daten mehr in der Datenbank sind, da ich vor Aufruf der Funktion die Tabellen mit drop_all() lösche und mit setup_all(True) neu erstelle. Ich kann die Funktion erst wieder aufrufen, wenn ich den Python Webserver neu gestartet hab.

Ich vermute also, dass es die Daten in der Session das Problem verursachen. Ich setze jetzt die Session mit session.flush() zurück und das funktioniert auch. Ich wollte wissen, ob das eine gute Lösung ist oder eine schlechte Idee.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Antworten