Я просто изучаю Google App Engine и пытаюсь найти хороший подход к управлению подключением к базе данных с экземпляром Google Cloud SQL (если вы не использовали GC-SQL, в основном это MySQL в облаке, с некоторыми ограничениями).
Я использую среду GAE python (2.7) с инфраструктурой webapp2 для обработки запросов. Я знаю, что в FAQ говорится, что он рекомендовал, чтобы с каждым запросом было создано новое соединение с БД, но я не знаю, какой рекомендуемый способ закрыть соединение. Каждый раз, когда я пытаюсь удалить таблицы во время разработки, GC-SQL зависает, и "show processlist" показывает, что существует множество процессов (вероятно, из-за того, что я не закрываю DB) и что один из них ждет блокировки ( вероятно, процесс, пытающийся отбросить таблицы). Это раздражает и заставляет меня перезапустить экземпляр GC-SQL (например, перезапустить службу mysql-сервера, я полагаю). Есть также случайные икоты ББ, которые, я считаю, связаны с тем, что я действительно не закрываю свое соединение с БД.
Так, например, должен ли я иметь деструктор на моем экземпляре подкласса webapp2.Requesthandler для отключения от БД? Кажется, что объекты GAE иногда кэшируются, так что тоже нужно что-то учитывать. Полагаю, я мог бы просто подключиться/запросить/отключиться для каждого запроса, но это кажется субоптимальным.
Я знаю, что это неопределенный вопрос, но я надеюсь, что кто-то, кто играл в этой области, может пропустить несколько советов по моему пути.
Спасибо заранее!
Update: Я попробовал реализовать оболочку вокруг методов, которым нужен курсор, используя Shay-ответ в качестве отправной точки. Я получаю ошибки GAE. Здесь возникает новый вопрос, связанный с этим: Каковы ограничения подключения для Google Cloud SQL от App Engine и как лучше всего использовать соединения с БД?