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