2012-12-20 16 views
8

Używam SQLAlchemy z kolbą jak pokazano tutaj: http://flask.pocoo.org/docs/patterns/sqlalchemy/sqlalchemy DB Sesja z kolbą, Postgres

Mam zestaw testów selen, który najpierw działa z Firefoksem, a następnie z Chrome.

Przed rozpoczęciem testów na każdy przeglądarek, tabele w bazie testowej (PostgreSQL) są opuszczane i stworzył.

To działa doskonale dla pierwszych przeglądarek, ale dla drugiego przeglądarce tworzyć SQL/drop próbę właśnie zamarza i nie błędy są widoczne.

Uważam, że dzieje się tak z powodu otwartych sesji SQLAlchemy, czy to prawda?

+2

put stos ślad tutaj –

Odpowiedz

3

Uważam, że dzieje się tak z powodu otwartych sesji SQLAlchemy, czy to prawda?

To najprawdopodobniej sprawa. Aby to potwierdzić, połącz się z bazą danych postgres i uruchom SELECT * FROM pg_stat_activity;

Nie jestem pewien, w jaki sposób można obsłużyć tworzenie DB/upuszczenie ale może chcesz zadzwonić dispose() i ewentualnie recreate() na puli połączeń sqlalchemy, po upewnieniu się, że każdy wyrejestrowany połączenie zostało zwrócone (na przykład z session.close()).

+0

rozwiązanie tymczasowe dla mnie było, aby wyłączyć automatyczne zatwierdzanie transakcji tj '= TRUE jako' parametru engine'. – Sri

+0

Interesujące. Myślę, że z autocommit sesji zwraca połączenie bezpośrednio do puli. Przypuszczam, że pomiędzy dwoma kolejnymi testami twój silnik i basen są zebrane, prawda? Wtedy oznaczałoby to, że masz jedną lub więcej otwartych transakcji w momencie zniszczenia twojego silnika, z których każdy utrzymuje połączenie otwarte na serwerze PG. –

0

To jest coś, co zdarza mi się też na prowadzeniu Flask unittest z SQLAlchemy i PostgreSQL. Wiele razy winowajca jest wyjątkiem, który nie rozprzestrzenił się w górę i utknął. Ten wyjątek również zatrzymuje test od prawidłowego czyszczenia, a tym samym do zamrożenia.

Jeśli tworzysz pakiet testowy, wywołaj metodę debugowania na kombinezonie i pokaże wyjątek. Połączono dokumenty tej metody: here.

Twoja obserwacja otwartej sesji Sqlalchemy może być również powodem. Przetestuję moją teorię na podstawie tej obserwacji jutro. Jeśli rozwiąże pewne wątpliwości, opublikuję tutaj.

Spójrz na to answer który pokazuje w jaki sposób można wywołać debugger na wyjątku. Może to pomoże wskazać problem.

+0

Dla mnie była to transakcja niezamknięta. Użycie 'autocommit = True' w moim' engine' rozwiązało problem, zasadniczo nie działając poprzez transakcje na postgresie. Nie jestem pewien, czy jest to rozwiązanie długoterminowe. – Sri

+0

'autocommit = True' może naruszyć spójność danych w zależności od aplikacji. –

Powiązane problemy