Sqlalchemy: сеансы sqlite3 не возвращаются при использовании на модели - PullRequest
0 голосов
/ 25 января 2019

Я использую SqlAlchemy с sqlite3, использую по умолчанию NullPool и сессии с областью действия. Когда мое веб-приложение работает долгое время, в конечном итоге я получаю ошибку «слишком много файлов открыто», и приложение вылетает. Я проследил это до многих файловых дескрипторов, открытых в моей базе данных sqlite3. Я включил регистрацию в NullPool, и я вижу, что некоторые сеансы не возвращаются в пул и не удаляются, хотя большинство из них. (NullPool должен создавать новый сеанс и возвращать его каждый раз.)

Кажется, что когда я делаю явный запрос, все в порядке - соединение БД создается и уничтожается после использования. Но в одном случае у меня есть метод в модели, который использует поля модели, и всякий раз, когда я вызываю этот метод, создается впечатление, что он создает новое соединение БД и никогда не освобождает его.

class Client(SurrogatePK, Model):
    # ... more stuff ...
    def unique_name(self):
        """Return a unique name for this client."""
        return f'{self.location.name}.{self.name}'

Я понимаю, что у экземпляра модели есть связанный сеанс (тот, с которым он был создан?), Но я не понимаю, почему этот метод будет создавать новое соединение с БД и никогда не освобождать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...