SQLALchemy DB-Sitzung mit Flask, Postgres

8

Ich verwende SQLAlchemy mit Flask, wie hier gezeigt: Ссылка

Ich habe eine Selenium-Testsuite, die zuerst mit Firefox und dann mit Chrome läuft.

Vor dem Start der Tests in jedem Browser werden Tabellen in der Testdatenbank (PostgreSQL) gelöscht und erstellt.

Es läuft perfekt für die ersten Browser, aber für den zweiten Browser wird der SQL Create / Drop-Versuch einfach eingefroren und es werden keine Fehler angezeigt.

Ich glaube, das liegt an offenen SQLAlchemy-Sitzungen, stimmt das?

    
Sri 20.12.2012, 13:50
quelle

2 Antworten

3
  

Ich glaube, das liegt an offenen SQLAlchemy-Sitzungen, stimmt das?

Das ist höchstwahrscheinlich der Fall. Um dies zu bestätigen, stellen Sie eine Verbindung zur postgres -Datenbank her und führen Sie SELECT * FROM pg_stat_activity ;

aus

Ich bin mir nicht sicher, wie Sie mit dem Erstellen / Löschen der Datenbank umgehen, aber Sie könnten dispose() und möglicherweise recreate() im SQLAlchemy-Verbindungspool aufrufen, nachdem Sie sichergestellt haben, dass eine ausgecheckte Verbindung zurückgegeben wurde (z. B. , mit session.close() ).

    
jd. 20.12.2012, 16:37
quelle
0

Das passiert mir auch, wenn ich den Flask Unittest mit SQLAlchemy und Postgres starte. Oftmals ist der Schuldige eine Ausnahme, die sich nicht nach oben ausbreitete und stecken blieb. Diese Ausnahme verhindert auch, dass der Test ordnungsgemäß aufgeräumt wird und daher eingefroren wird.

Wenn Sie eine Testsuite erstellen, rufen Sie die Debug-Methode für die Klage auf und es wird die Ausnahme angezeigt. Verknüpft die Dokumente dieser Methode hier .

Ihre Beobachtung einer offenen Sqlalchemy-Sitzung kann auch ein Grund sein. Ich werde morgen eine Theorie von mir anhand dieser Beobachtung testen. Wenn es Zweifel beseitigt, werde ich hier posten.

Sehen Sie sich diese Antwort an, die zeigt, wie Sie Debugger bei Ausnahme auslösen können. Vielleicht kann es helfen, ein Problem zu lokalisieren.

    
codecool 20.12.2012 19:17
quelle