Я пытаюсь передавать большие CSV-файлы клиентам с моего сервера Flask, который использует Flask-SQLAlchemy.
При настройке приложения (с использованием фабричного шаблона), db.session.close()
вызывается после каждого запроса:
@app.after_request
def close_connection(r):
db.session.close()
return r
Эта конфигурация работала до сих пор, так как все запросы недолговечны.Но при потоковой передаче ответа сеанс SQLAlchemy преждевременно закрывается, и при вызове генератора выдается следующая ошибка:
sqlalchemy.orm.exc.DetachedInstanceError: Parent instance <Question> is not bound to a Session; lazy load operation of attribute 'offered_answers' cannot proceed
Псевдокод:
@app.route('/export')
def export_data():
answers = Answer.query.all()
questions = Question.query.all()
def generate():
Iterate through answers questions and write out various relationships to csv
response = Response(stream_with_context(generate()), mimetype='text/csv')
return response
Я пробовал несколькоконфигурации использования / не использования stream_with_context
и глобальных флагов в def close_connection
для автоматического закрытия соединения, но сохраняется та же ошибка.