Jakie jest dobre podejście do zarządzania połączeniem db w aplikacji Python Google Cloud SQL (GAE)?

Uczę się tylko Google App Engine i próbuję znaleźć dobre podejście do zarządzania połączeniem z bazą danych do instancji SQL Google Cloud (jeśli nie korzystałeś z GC-SQL, to w zasadzie jest to MySQL w chmurze, z kilkoma ograniczenia).

Używam środowiska GAE python (2.7) z frameworkiem webapp2 do obsługi żądań. Wiem, że FAQ mówi, że zaleca się nawiązanie nowego połączenia z bazą danych przy każdym żądaniu, ale nie wiem, jaki jest zalecany sposób zamknięcia połączenia. Za każdym razem, gdy próbuję upuścić tabele podczas programowania, GC-SQL zawiesza się, a „pokaż listę procesów” pokazuje, że istnieje kilka procesów (prawdopodobnie dlatego, że nie zamykam bazy danych) i że jeden z nich czeka na blokadę ( prawdopodobnie proces próbuje upuścić tabele). Jest to denerwujące i zmusza mnie do ponownego uruchomienia instancji GC-SQL (jak sobie wyobrażam, np. Ponowne uruchomienie usługi mysql-server). Istnieją również sporadyczne czkawki DB, które moim zdaniem są związane z faktem, że tak naprawdę nie zamykam mojego połączenia DB.

Na przykład, czy powinienem mieć destruktor w mojej instancji podklasy webapp2.Requesthandler, aby odłączyć się od bazy danych? Obiekty GAE wydają się być czasami buforowane, więc jest to także coś do rozważenia. Przypuszczam, że mógłbym po prostu połączyć / query / disconnect dla każdego zapytania, ale wydaje się to nieoptymalne.

Wiem, że jest to niejasne pytanie, ale mam nadzieję, że ktoś, kto gra w tej dziedzinie, może podpowiedzieć mi kilka wskazówek.

Z góry dziękuję!

Aktualizacja: Próbowałem zaimplementować opakowanie wokół metod, które wymagają kursora, używając odpowiedzi Shaya jako punktu wyjścia. Dostaję błędy GAE. Oto nowe pytanie specyficzne dla tego:Jakie są ograniczenia połączeń dla Google Cloud SQL z App Engine i jak najlepiej wykorzystać połączenia DB?

questionAnswers(4)

yourAnswerToTheQuestion